Fix warnings occured during profiledboostrap on
[official-gcc.git] / gcc / fortran / gfortran.texi
blob300b8b8440cd21fe3b611372b469d7ad2ef060af
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename gfortran.info
4 @set copyrights-gfortran 1999-2015
6 @include gcc-common.texi
8 @settitle The GNU Fortran Compiler
10 @c Create a separate index for command line options
11 @defcodeindex op
12 @c Merge the standard indexes into a single one.
13 @syncodeindex fn cp
14 @syncodeindex vr cp
15 @syncodeindex ky cp
16 @syncodeindex pg cp
17 @syncodeindex tp cp
19 @c TODO: The following "Part" definitions are included here temporarily
20 @c until they are incorporated into the official Texinfo distribution.
21 @c They borrow heavily from Texinfo's \unnchapentry definitions.
23 @tex
24 \gdef\part#1#2{%
25   \pchapsepmacro
26   \gdef\thischapter{}
27   \begingroup
28     \vglue\titlepagetopglue
29     \titlefonts \rm
30     \leftline{Part #1:@* #2}
31     \vskip4pt \hrule height 4pt width \hsize \vskip4pt
32   \endgroup
33   \writetocentry{part}{#2}{#1}
35 \gdef\blankpart{%
36   \writetocentry{blankpart}{}{}
38 % Part TOC-entry definition for summary contents.
39 \gdef\dosmallpartentry#1#2#3#4{%
40   \vskip .5\baselineskip plus.2\baselineskip
41   \begingroup
42     \let\rm=\bf \rm
43     \tocentry{Part #2: #1}{\doshortpageno\bgroup#4\egroup}
44   \endgroup
46 \gdef\dosmallblankpartentry#1#2#3#4{%
47   \vskip .5\baselineskip plus.2\baselineskip
49 % Part TOC-entry definition for regular contents.  This has to be
50 % equated to an existing entry to not cause problems when the PDF
51 % outline is created.
52 \gdef\dopartentry#1#2#3#4{%
53   \unnchapentry{Part #2: #1}{}{#3}{#4}
55 \gdef\doblankpartentry#1#2#3#4{}
56 @end tex
58 @c %**end of header
60 @c Use with @@smallbook.
62 @c %** start of document
64 @c Cause even numbered pages to be printed on the left hand side of
65 @c the page and odd numbered pages to be printed on the right hand
66 @c side of the page.  Using this, you can print on both sides of a
67 @c sheet of paper and have the text on the same part of the sheet.
69 @c The text on right hand pages is pushed towards the right hand
70 @c margin and the text on left hand pages is pushed toward the left
71 @c hand margin.
72 @c (To provide the reverse effect, set bindingoffset to -0.75in.)
74 @c @tex
75 @c \global\bindingoffset=0.75in
76 @c \global\normaloffset =0.75in
77 @c @end tex
79 @copying
80 Copyright @copyright{} @value{copyrights-gfortran} Free Software Foundation, Inc.
82 Permission is granted to copy, distribute and/or modify this document
83 under the terms of the GNU Free Documentation License, Version 1.3 or
84 any later version published by the Free Software Foundation; with the
85 Invariant Sections being ``Funding Free Software'', the Front-Cover
86 Texts being (a) (see below), and with the Back-Cover Texts being (b)
87 (see below).  A copy of the license is included in the section entitled
88 ``GNU Free Documentation License''.
90 (a) The FSF's Front-Cover Text is:
92      A GNU Manual
94 (b) The FSF's Back-Cover Text is:
96      You have freedom to copy and modify this GNU Manual, like GNU
97      software.  Copies published by the Free Software Foundation raise
98      funds for GNU development.
99 @end copying
101 @ifinfo
102 @dircategory Software development
103 @direntry
104 * gfortran: (gfortran).                  The GNU Fortran Compiler.
105 @end direntry
106 This file documents the use and the internals of
107 the GNU Fortran compiler, (@command{gfortran}).
109 Published by the Free Software Foundation
110 51 Franklin Street, Fifth Floor
111 Boston, MA 02110-1301 USA
113 @insertcopying
114 @end ifinfo
117 @setchapternewpage odd
118 @titlepage
119 @title Using GNU Fortran
120 @versionsubtitle
121 @author The @t{gfortran} team
122 @page
123 @vskip 0pt plus 1filll
124 Published by the Free Software Foundation@*
125 51 Franklin Street, Fifth Floor@*
126 Boston, MA 02110-1301, USA@*
127 @c Last printed ??ber, 19??.@*
128 @c Printed copies are available for $? each.@*
129 @c ISBN ???
130 @sp 1
131 @insertcopying
132 @end titlepage
134 @c TODO: The following "Part" definitions are included here temporarily
135 @c until they are incorporated into the official Texinfo distribution.
137 @tex
138 \global\let\partentry=\dosmallpartentry
139 \global\let\blankpartentry=\dosmallblankpartentry
140 @end tex
141 @summarycontents
143 @tex
144 \global\let\partentry=\dopartentry
145 \global\let\blankpartentry=\doblankpartentry
146 @end tex
147 @contents
149 @page
151 @c ---------------------------------------------------------------------
152 @c TexInfo table of contents.
153 @c ---------------------------------------------------------------------
155 @ifnottex
156 @node Top
157 @top Introduction
158 @cindex Introduction
160 This manual documents the use of @command{gfortran},
161 the GNU Fortran compiler.  You can find in this manual how to invoke
162 @command{gfortran}, as well as its features and incompatibilities.
164 @ifset DEVELOPMENT
165 @emph{Warning:} This document, and the compiler it describes, are still
166 under development.  While efforts are made to keep it up-to-date, it might
167 not accurately reflect the status of the most recent GNU Fortran compiler.
168 @end ifset
170 @comment
171 @comment  When you add a new menu item, please keep the right hand
172 @comment  aligned to the same column.  Do not use tabs.  This provides
173 @comment  better formatting.
174 @comment
175 @menu
176 * Introduction::
178 Part I: Invoking GNU Fortran
179 * Invoking GNU Fortran:: Command options supported by @command{gfortran}.
180 * Runtime::              Influencing runtime behavior with environment variables.
182 Part II: Language Reference
183 * Fortran 2003 and 2008 status::  Fortran 2003 and 2008 features supported by GNU Fortran.
184 * Compiler Characteristics::      User-visible implementation details.
185 * Extensions::                    Language extensions implemented by GNU Fortran.
186 * Mixed-Language Programming::    Interoperability with C
187 * Coarray Programming::
188 * Intrinsic Procedures:: Intrinsic procedures supported by GNU Fortran.
189 * Intrinsic Modules::    Intrinsic modules supported by GNU Fortran.
191 * Contributing::         How you can help.
192 * Copying::              GNU General Public License says
193                          how you can copy and share GNU Fortran.
194 * GNU Free Documentation License::
195                          How you can copy and share this manual.
196 * Funding::              How to help assure continued work for free software.
197 * Option Index::         Index of command line options
198 * Keyword Index::        Index of concepts
199 @end menu
200 @end ifnottex
202 @c ---------------------------------------------------------------------
203 @c Introduction
204 @c ---------------------------------------------------------------------
206 @node Introduction
207 @chapter Introduction
209 @c The following duplicates the text on the TexInfo table of contents.
210 @iftex
211 This manual documents the use of @command{gfortran}, the GNU Fortran
212 compiler.  You can find in this manual how to invoke @command{gfortran},
213 as well as its features and incompatibilities.
215 @ifset DEVELOPMENT
216 @emph{Warning:} This document, and the compiler it describes, are still
217 under development.  While efforts are made to keep it up-to-date, it
218 might not accurately reflect the status of the most recent GNU Fortran
219 compiler.
220 @end ifset
221 @end iftex
223 The GNU Fortran compiler front end was
224 designed initially as a free replacement for,
225 or alternative to, the Unix @command{f95} command;
226 @command{gfortran} is the command you will use to invoke the compiler.
228 @menu
229 * About GNU Fortran::    What you should know about the GNU Fortran compiler.
230 * GNU Fortran and GCC::  You can compile Fortran, C, or other programs.
231 * Preprocessing and conditional compilation:: The Fortran preprocessor
232 * GNU Fortran and G77::  Why we chose to start from scratch.
233 * Project Status::       Status of GNU Fortran, roadmap, proposed extensions.
234 * Standards::            Standards supported by GNU Fortran.
235 @end menu
238 @c ---------------------------------------------------------------------
239 @c About GNU Fortran
240 @c ---------------------------------------------------------------------
242 @node About GNU Fortran
243 @section About GNU Fortran
245 The GNU Fortran compiler supports the Fortran 77, 90 and 95 standards
246 completely, parts of the Fortran 2003 and Fortran 2008 standards, and
247 several vendor extensions.  The development goal is to provide the
248 following features:
250 @itemize @bullet
251 @item
252 Read a user's program,
253 stored in a file and containing instructions written
254 in Fortran 77, Fortran 90, Fortran 95, Fortran 2003 or Fortran 2008.
255 This file contains @dfn{source code}.
257 @item
258 Translate the user's program into instructions a computer
259 can carry out more quickly than it takes to translate the
260 instructions in the first
261 place.  The result after compilation of a program is
262 @dfn{machine code},
263 code designed to be efficiently translated and processed
264 by a machine such as your computer.
265 Humans usually are not as good writing machine code
266 as they are at writing Fortran (or C++, Ada, or Java),
267 because it is easy to make tiny mistakes writing machine code.
269 @item
270 Provide the user with information about the reasons why
271 the compiler is unable to create a binary from the source code.
272 Usually this will be the case if the source code is flawed.
273 The Fortran 90 standard requires that the compiler can point out
274 mistakes to the user.
275 An incorrect usage of the language causes an @dfn{error message}.
277 The compiler will also attempt to diagnose cases where the
278 user's program contains a correct usage of the language,
279 but instructs the computer to do something questionable.
280 This kind of diagnostics message is called a @dfn{warning message}.
282 @item
283 Provide optional information about the translation passes
284 from the source code to machine code.
285 This can help a user of the compiler to find the cause of
286 certain bugs which may not be obvious in the source code,
287 but may be more easily found at a lower level compiler output.
288 It also helps developers to find bugs in the compiler itself.
290 @item
291 Provide information in the generated machine code that can
292 make it easier to find bugs in the program (using a debugging tool,
293 called a @dfn{debugger}, such as the GNU Debugger @command{gdb}).
295 @item
296 Locate and gather machine code already generated to
297 perform actions requested by statements in the user's program.
298 This machine code is organized into @dfn{modules} and is located
299 and @dfn{linked} to the user program.
300 @end itemize
302 The GNU Fortran compiler consists of several components:
304 @itemize @bullet
305 @item
306 A version of the @command{gcc} command
307 (which also might be installed as the system's @command{cc} command)
308 that also understands and accepts Fortran source code.
309 The @command{gcc} command is the @dfn{driver} program for
310 all the languages in the GNU Compiler Collection (GCC);
311 With @command{gcc},
312 you can compile the source code of any language for
313 which a front end is available in GCC.
315 @item
316 The @command{gfortran} command itself,
317 which also might be installed as the
318 system's @command{f95} command.
319 @command{gfortran} is just another driver program,
320 but specifically for the Fortran compiler only.
321 The difference with @command{gcc} is that @command{gfortran}
322 will automatically link the correct libraries to your program.
324 @item
325 A collection of run-time libraries.
326 These libraries contain the machine code needed to support
327 capabilities of the Fortran language that are not directly
328 provided by the machine code generated by the
329 @command{gfortran} compilation phase,
330 such as intrinsic functions and subroutines,
331 and routines for interaction with files and the operating system.
332 @c and mechanisms to spawn,
333 @c unleash and pause threads in parallelized code.
335 @item
336 The Fortran compiler itself, (@command{f951}).
337 This is the GNU Fortran parser and code generator,
338 linked to and interfaced with the GCC backend library.
339 @command{f951} ``translates'' the source code to
340 assembler code.  You would typically not use this
341 program directly;
342 instead, the @command{gcc} or @command{gfortran} driver
343 programs will call it for you.
344 @end itemize
347 @c ---------------------------------------------------------------------
348 @c GNU Fortran and GCC
349 @c ---------------------------------------------------------------------
351 @node GNU Fortran and GCC
352 @section GNU Fortran and GCC
353 @cindex GNU Compiler Collection
354 @cindex GCC
356 GNU Fortran is a part of GCC, the @dfn{GNU Compiler Collection}.  GCC
357 consists of a collection of front ends for various languages, which
358 translate the source code into a language-independent form called
359 @dfn{GENERIC}.  This is then processed by a common middle end which
360 provides optimization, and then passed to one of a collection of back
361 ends which generate code for different computer architectures and
362 operating systems.
364 Functionally, this is implemented with a driver program (@command{gcc})
365 which provides the command-line interface for the compiler.  It calls
366 the relevant compiler front-end program (e.g., @command{f951} for
367 Fortran) for each file in the source code, and then calls the assembler
368 and linker as appropriate to produce the compiled output.  In a copy of
369 GCC which has been compiled with Fortran language support enabled,
370 @command{gcc} will recognize files with @file{.f}, @file{.for}, @file{.ftn},
371 @file{.f90}, @file{.f95}, @file{.f03} and @file{.f08} extensions as
372 Fortran source code, and compile it accordingly.  A @command{gfortran}
373 driver program is also provided, which is identical to @command{gcc}
374 except that it automatically links the Fortran runtime libraries into the
375 compiled program.
377 Source files with @file{.f}, @file{.for}, @file{.fpp}, @file{.ftn}, @file{.F},
378 @file{.FOR}, @file{.FPP}, and @file{.FTN} extensions are treated as fixed form.
379 Source files with @file{.f90}, @file{.f95}, @file{.f03}, @file{.f08},
380 @file{.F90}, @file{.F95}, @file{.F03} and @file{.F08} extensions are
381 treated as free form.  The capitalized versions of either form are run
382 through preprocessing.  Source files with the lower case @file{.fpp}
383 extension are also run through preprocessing.
385 This manual specifically documents the Fortran front end, which handles
386 the programming language's syntax and semantics.  The aspects of GCC
387 which relate to the optimization passes and the back-end code generation
388 are documented in the GCC manual; see 
389 @ref{Top,,Introduction,gcc,Using the GNU Compiler Collection (GCC)}.
390 The two manuals together provide a complete reference for the GNU
391 Fortran compiler.
394 @c ---------------------------------------------------------------------
395 @c Preprocessing and conditional compilation
396 @c ---------------------------------------------------------------------
398 @node Preprocessing and conditional compilation
399 @section Preprocessing and conditional compilation
400 @cindex CPP
401 @cindex FPP
402 @cindex Conditional compilation
403 @cindex Preprocessing
404 @cindex preprocessor, include file handling
406 Many Fortran compilers including GNU Fortran allow passing the source code
407 through a C preprocessor (CPP; sometimes also called the Fortran preprocessor,
408 FPP) to allow for conditional compilation.  In the case of GNU Fortran,
409 this is the GNU C Preprocessor in the traditional mode.  On systems with
410 case-preserving file names, the preprocessor is automatically invoked if the
411 filename extension is @file{.F}, @file{.FOR}, @file{.FTN}, @file{.fpp},
412 @file{.FPP}, @file{.F90}, @file{.F95}, @file{.F03} or @file{.F08}.  To manually
413 invoke the preprocessor on any file, use @option{-cpp}, to disable
414 preprocessing on files where the preprocessor is run automatically, use
415 @option{-nocpp}.
417 If a preprocessed file includes another file with the Fortran @code{INCLUDE}
418 statement, the included file is not preprocessed.  To preprocess included
419 files, use the equivalent preprocessor statement @code{#include}.
421 If GNU Fortran invokes the preprocessor, @code{__GFORTRAN__}
422 is defined and @code{__GNUC__}, @code{__GNUC_MINOR__} and
423 @code{__GNUC_PATCHLEVEL__} can be used to determine the version of the
424 compiler.  See @ref{Top,,Overview,cpp,The C Preprocessor} for details.
426 While CPP is the de-facto standard for preprocessing Fortran code,
427 Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
428 Conditional Compilation, which is not widely used and not directly
429 supported by the GNU Fortran compiler.  You can use the program coco
430 to preprocess such files (@uref{http://www.daniellnagle.com/coco.html}).
433 @c ---------------------------------------------------------------------
434 @c GNU Fortran and G77
435 @c ---------------------------------------------------------------------
437 @node GNU Fortran and G77
438 @section GNU Fortran and G77
439 @cindex Fortran 77
440 @cindex @command{g77}
442 The GNU Fortran compiler is the successor to @command{g77}, the Fortran 
443 77 front end included in GCC prior to version 4.  It is an entirely new 
444 program that has been designed to provide Fortran 95 support and 
445 extensibility for future Fortran language standards, as well as providing 
446 backwards compatibility for Fortran 77 and nearly all of the GNU language 
447 extensions supported by @command{g77}.
450 @c ---------------------------------------------------------------------
451 @c Project Status
452 @c ---------------------------------------------------------------------
454 @node Project Status
455 @section Project Status
457 @quotation
458 As soon as @command{gfortran} can parse all of the statements correctly,
459 it will be in the ``larva'' state.
460 When we generate code, the ``puppa'' state.
461 When @command{gfortran} is done,
462 we'll see if it will be a beautiful butterfly,
463 or just a big bug....
465 --Andy Vaught, April 2000
466 @end quotation
468 The start of the GNU Fortran 95 project was announced on
469 the GCC homepage in March 18, 2000
470 (even though Andy had already been working on it for a while,
471 of course).
473 The GNU Fortran compiler is able to compile nearly all
474 standard-compliant Fortran 95, Fortran 90, and Fortran 77 programs,
475 including a number of standard and non-standard extensions, and can be
476 used on real-world programs.  In particular, the supported extensions
477 include OpenMP, Cray-style pointers, and several Fortran 2003 and Fortran
478 2008 features, including TR 15581.  However, it is still under
479 development and has a few remaining rough edges.
480 There also is initial support for OpenACC.
481 Note that this is an experimental feature, incomplete, and subject to
482 change in future versions of GCC.  See
483 @uref{https://gcc.gnu.org/wiki/OpenACC} for more information.
485 At present, the GNU Fortran compiler passes the
486 @uref{http://www.fortran-2000.com/ArnaudRecipes/fcvs21_f95.html, 
487 NIST Fortran 77 Test Suite}, and produces acceptable results on the
488 @uref{http://www.netlib.org/lapack/faq.html#1.21, LAPACK Test Suite}.
489 It also provides respectable performance on 
490 the @uref{http://www.polyhedron.com/fortran-compiler-comparisons/polyhedron-benchmark-suite,
491 Polyhedron Fortran
492 compiler benchmarks} and the
493 @uref{http://www.netlib.org/benchmark/livermore,
494 Livermore Fortran Kernels test}.  It has been used to compile a number of
495 large real-world programs, including
496 @uref{http://hirlam.org/, the HARMONIE and HIRLAM weather forecasting code} and
497 @uref{http://physical-chemistry.scb.uwa.edu.au/tonto/wiki/index.php/Main_Page,
498 the Tonto quantum chemistry package}; see
499 @url{https://gcc.gnu.org/@/wiki/@/GfortranApps} for an extended list.
501 Among other things, the GNU Fortran compiler is intended as a replacement
502 for G77.  At this point, nearly all programs that could be compiled with
503 G77 can be compiled with GNU Fortran, although there are a few minor known
504 regressions.
506 The primary work remaining to be done on GNU Fortran falls into three
507 categories: bug fixing (primarily regarding the treatment of invalid code
508 and providing useful error messages), improving the compiler optimizations
509 and the performance of compiled code, and extending the compiler to support
510 future standards---in particular, Fortran 2003 and Fortran 2008.
513 @c ---------------------------------------------------------------------
514 @c Standards
515 @c ---------------------------------------------------------------------
517 @node Standards
518 @section Standards
519 @cindex Standards
521 @menu
522 * Varying Length Character Strings::
523 @end menu
525 The GNU Fortran compiler implements
526 ISO/IEC 1539:1997 (Fortran 95).  As such, it can also compile essentially all
527 standard-compliant Fortran 90 and Fortran 77 programs.   It also supports
528 the ISO/IEC TR-15581 enhancements to allocatable arrays.
530 GNU Fortran also have a partial support for ISO/IEC 1539-1:2004 (Fortran
531 2003), ISO/IEC 1539-1:2010 (Fortran 2008), the Technical Specification
532 @code{Further Interoperability of Fortran with C} (ISO/IEC TS 29113:2012).
533 Full support of those standards and future Fortran standards is planned.
534 The current status of the support is can be found in the
535 @ref{Fortran 2003 status}, @ref{Fortran 2008 status} and
536 @ref{TS 29113 status} sections of the documentation.
538 Additionally, the GNU Fortran compilers supports the OpenMP specification
539 (version 4.0, @url{http://openmp.org/@/wp/@/openmp-specifications/}).
540 There also is initial support for the OpenACC specification (targeting
541 version 2.0, @uref{http://www.openacc.org/}).
542 Note that this is an experimental feature, incomplete, and subject to
543 change in future versions of GCC.  See
544 @uref{https://gcc.gnu.org/wiki/OpenACC} for more information.
546 @node Varying Length Character Strings
547 @subsection Varying Length Character Strings
548 @cindex Varying length character strings
549 @cindex Varying length strings
550 @cindex strings, varying length
552 The Fortran 95 standard specifies in Part 2 (ISO/IEC 1539-2:2000)
553 varying length character strings.  While GNU Fortran currently does not
554 support such strings directly, there exist two Fortran implementations
555 for them, which work with GNU Fortran.  They can be found at
556 @uref{http://www.fortran.com/@/iso_varying_string.f95} and at
557 @uref{ftp://ftp.nag.co.uk/@/sc22wg5/@/ISO_VARYING_STRING/}.
559 Deferred-length character strings of Fortran 2003 supports part of
560 the features of @code{ISO_VARYING_STRING} and should be considered as
561 replacement. (Namely, allocatable or pointers of the type
562 @code{character(len=:)}.)
565 @c =====================================================================
566 @c PART I: INVOCATION REFERENCE
567 @c =====================================================================
569 @tex
570 \part{I}{Invoking GNU Fortran}
571 @end tex
573 @c ---------------------------------------------------------------------
574 @c Compiler Options
575 @c ---------------------------------------------------------------------
577 @include invoke.texi
580 @c ---------------------------------------------------------------------
581 @c Runtime
582 @c ---------------------------------------------------------------------
584 @node Runtime
585 @chapter Runtime:  Influencing runtime behavior with environment variables
586 @cindex environment variable
588 The behavior of the @command{gfortran} can be influenced by
589 environment variables.
591 Malformed environment variables are silently ignored.
593 @menu
594 * TMPDIR:: Directory for scratch files
595 * GFORTRAN_STDIN_UNIT:: Unit number for standard input
596 * GFORTRAN_STDOUT_UNIT:: Unit number for standard output
597 * GFORTRAN_STDERR_UNIT:: Unit number for standard error
598 * GFORTRAN_UNBUFFERED_ALL:: Do not buffer I/O for all units.
599 * GFORTRAN_UNBUFFERED_PRECONNECTED:: Do not buffer I/O for preconnected units.
600 * GFORTRAN_SHOW_LOCUS::  Show location for runtime errors
601 * GFORTRAN_OPTIONAL_PLUS:: Print leading + where permitted
602 * GFORTRAN_DEFAULT_RECL:: Default record length for new files
603 * GFORTRAN_LIST_SEPARATOR::  Separator for list output
604 * GFORTRAN_CONVERT_UNIT::  Set endianness for unformatted I/O
605 * GFORTRAN_ERROR_BACKTRACE:: Show backtrace on run-time errors
606 @end menu
608 @node TMPDIR
609 @section @env{TMPDIR}---Directory for scratch files
611 When opening a file with @code{STATUS='SCRATCH'}, GNU Fortran tries to
612 create the file in one of the potential directories by testing each
613 directory in the order below.
615 @enumerate
616 @item
617 The environment variable @env{TMPDIR}, if it exists.
619 @item
620 On the MinGW target, the directory returned by the @code{GetTempPath}
621 function. Alternatively, on the Cygwin target, the @env{TMP} and
622 @env{TEMP} environment variables, if they exist, in that order.
624 @item
625 The @code{P_tmpdir} macro if it is defined, otherwise the directory
626 @file{/tmp}.
627 @end enumerate
629 @node GFORTRAN_STDIN_UNIT
630 @section @env{GFORTRAN_STDIN_UNIT}---Unit number for standard input
632 This environment variable can be used to select the unit number
633 preconnected to standard input.  This must be a positive integer.
634 The default value is 5.
636 @node GFORTRAN_STDOUT_UNIT
637 @section @env{GFORTRAN_STDOUT_UNIT}---Unit number for standard output
639 This environment variable can be used to select the unit number
640 preconnected to standard output.  This must be a positive integer.
641 The default value is 6.
643 @node GFORTRAN_STDERR_UNIT
644 @section @env{GFORTRAN_STDERR_UNIT}---Unit number for standard error
646 This environment variable can be used to select the unit number
647 preconnected to standard error.  This must be a positive integer.
648 The default value is 0.
650 @node GFORTRAN_UNBUFFERED_ALL
651 @section @env{GFORTRAN_UNBUFFERED_ALL}---Do not buffer I/O on all units
653 This environment variable controls whether all I/O is unbuffered.  If
654 the first letter is @samp{y}, @samp{Y} or @samp{1}, all I/O is
655 unbuffered.  This will slow down small sequential reads and writes.  If
656 the first letter is @samp{n}, @samp{N} or @samp{0}, I/O is buffered.
657 This is the default.
659 @node GFORTRAN_UNBUFFERED_PRECONNECTED
660 @section @env{GFORTRAN_UNBUFFERED_PRECONNECTED}---Do not buffer I/O on preconnected units
662 The environment variable named @env{GFORTRAN_UNBUFFERED_PRECONNECTED} controls
663 whether I/O on a preconnected unit (i.e.@: STDOUT or STDERR) is unbuffered.  If 
664 the first letter is @samp{y}, @samp{Y} or @samp{1}, I/O is unbuffered.  This
665 will slow down small sequential reads and writes.  If the first letter
666 is @samp{n}, @samp{N} or @samp{0}, I/O is buffered.  This is the default.
668 @node GFORTRAN_SHOW_LOCUS
669 @section @env{GFORTRAN_SHOW_LOCUS}---Show location for runtime errors
671 If the first letter is @samp{y}, @samp{Y} or @samp{1}, filename and
672 line numbers for runtime errors are printed.  If the first letter is
673 @samp{n}, @samp{N} or @samp{0}, do not print filename and line numbers
674 for runtime errors.  The default is to print the location.
676 @node GFORTRAN_OPTIONAL_PLUS
677 @section @env{GFORTRAN_OPTIONAL_PLUS}---Print leading + where permitted
679 If the first letter is @samp{y}, @samp{Y} or @samp{1},
680 a plus sign is printed
681 where permitted by the Fortran standard.  If the first letter
682 is @samp{n}, @samp{N} or @samp{0}, a plus sign is not printed
683 in most cases.  Default is not to print plus signs.
685 @node GFORTRAN_DEFAULT_RECL
686 @section @env{GFORTRAN_DEFAULT_RECL}---Default record length for new files
688 This environment variable specifies the default record length, in
689 bytes, for files which are opened without a @code{RECL} tag in the
690 @code{OPEN} statement.  This must be a positive integer.  The
691 default value is 1073741824 bytes (1 GB).
693 @node GFORTRAN_LIST_SEPARATOR
694 @section @env{GFORTRAN_LIST_SEPARATOR}---Separator for list output
696 This environment variable specifies the separator when writing
697 list-directed output.  It may contain any number of spaces and
698 at most one comma.  If you specify this on the command line,
699 be sure to quote spaces, as in
700 @smallexample
701 $ GFORTRAN_LIST_SEPARATOR='  ,  ' ./a.out
702 @end smallexample
703 when @command{a.out} is the compiled Fortran program that you want to run.
704 Default is a single space.
706 @node GFORTRAN_CONVERT_UNIT
707 @section @env{GFORTRAN_CONVERT_UNIT}---Set endianness for unformatted I/O
709 By setting the @env{GFORTRAN_CONVERT_UNIT} variable, it is possible
710 to change the representation of data for unformatted files.
711 The syntax for the @env{GFORTRAN_CONVERT_UNIT} variable is:
712 @smallexample
713 GFORTRAN_CONVERT_UNIT: mode | mode ';' exception | exception ;
714 mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ;
715 exception: mode ':' unit_list | unit_list ;
716 unit_list: unit_spec | unit_list unit_spec ;
717 unit_spec: INTEGER | INTEGER '-' INTEGER ;
718 @end smallexample
719 The variable consists of an optional default mode, followed by
720 a list of optional exceptions, which are separated by semicolons
721 from the preceding default and each other.  Each exception consists
722 of a format and a comma-separated list of units.  Valid values for
723 the modes are the same as for the @code{CONVERT} specifier:
725 @itemize @w{}
726 @item @code{NATIVE} Use the native format.  This is the default.
727 @item @code{SWAP} Swap between little- and big-endian.
728 @item @code{LITTLE_ENDIAN} Use the little-endian format
729 for unformatted files.
730 @item @code{BIG_ENDIAN} Use the big-endian format for unformatted files.
731 @end itemize
732 A missing mode for an exception is taken to mean @code{BIG_ENDIAN}.
733 Examples of values for @env{GFORTRAN_CONVERT_UNIT} are:
734 @itemize @w{}
735 @item @code{'big_endian'}  Do all unformatted I/O in big_endian mode.
736 @item @code{'little_endian;native:10-20,25'}  Do all unformatted I/O 
737 in little_endian mode, except for units 10 to 20 and 25, which are in
738 native format.
739 @item @code{'10-20'}  Units 10 to 20 are big-endian, the rest is native.
740 @end itemize
742 Setting the environment variables should be done on the command
743 line or via the @command{export}
744 command for @command{sh}-compatible shells and via @command{setenv}
745 for @command{csh}-compatible shells.
747 Example for @command{sh}:
748 @smallexample
749 $ gfortran foo.f90
750 $ GFORTRAN_CONVERT_UNIT='big_endian;native:10-20' ./a.out
751 @end smallexample
753 Example code for @command{csh}:
754 @smallexample
755 % gfortran foo.f90
756 % setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20'
757 % ./a.out
758 @end smallexample
760 Using anything but the native representation for unformatted data
761 carries a significant speed overhead.  If speed in this area matters
762 to you, it is best if you use this only for data that needs to be
763 portable.
765 @xref{CONVERT specifier}, for an alternative way to specify the
766 data representation for unformatted files.  @xref{Runtime Options}, for
767 setting a default data representation for the whole program.  The
768 @code{CONVERT} specifier overrides the @option{-fconvert} compile options.
770 @emph{Note that the values specified via the GFORTRAN_CONVERT_UNIT
771 environment variable will override the CONVERT specifier in the
772 open statement}.  This is to give control over data formats to
773 users who do not have the source code of their program available.
775 @node GFORTRAN_ERROR_BACKTRACE
776 @section @env{GFORTRAN_ERROR_BACKTRACE}---Show backtrace on run-time errors
778 If the @env{GFORTRAN_ERROR_BACKTRACE} variable is set to @samp{y},
779 @samp{Y} or @samp{1} (only the first letter is relevant) then a
780 backtrace is printed when a serious run-time error occurs.  To disable
781 the backtracing, set the variable to @samp{n}, @samp{N}, @samp{0}.
782 Default is to print a backtrace unless the @option{-fno-backtrace}
783 compile option was used.
785 @c =====================================================================
786 @c PART II: LANGUAGE REFERENCE
787 @c =====================================================================
789 @tex
790 \part{II}{Language Reference}
791 @end tex
793 @c ---------------------------------------------------------------------
794 @c Fortran 2003 and 2008 Status
795 @c ---------------------------------------------------------------------
797 @node Fortran 2003 and 2008 status
798 @chapter Fortran 2003 and 2008 Status
800 @menu
801 * Fortran 2003 status::
802 * Fortran 2008 status::
803 * TS 29113 status::
804 @end menu
806 @node Fortran 2003 status
807 @section Fortran 2003 status
809 GNU Fortran supports several Fortran 2003 features; an incomplete
810 list can be found below.  See also the
811 @uref{https://gcc.gnu.org/wiki/Fortran2003, wiki page} about Fortran 2003.
813 @itemize
814 @item Procedure pointers including procedure-pointer components with
815 @code{PASS} attribute.
817 @item Procedures which are bound to a derived type (type-bound procedures)
818 including @code{PASS}, @code{PROCEDURE} and @code{GENERIC}, and
819 operators bound to a type.
821 @item Abstract interfaces and type extension with the possibility to
822 override type-bound procedures or to have deferred binding.
824 @item Polymorphic entities (``@code{CLASS}'') for derived types and unlimited
825 polymorphism (``@code{CLASS(*)}'') -- including @code{SAME_TYPE_AS},
826 @code{EXTENDS_TYPE_OF} and @code{SELECT TYPE} for scalars and arrays and
827 finalization.
829 @item Generic interface names, which have the same name as derived types,
830 are now supported. This allows one to write constructor functions.  Note
831 that Fortran does not support static constructor functions.  For static
832 variables, only default initialization or structure-constructor
833 initialization are available.
835 @item The @code{ASSOCIATE} construct.
837 @item Interoperability with C including enumerations, 
839 @item In structure constructors the components with default values may be
840 omitted.
842 @item Extensions to the @code{ALLOCATE} statement, allowing for a
843 type-specification with type parameter and for allocation and initialization
844 from a @code{SOURCE=} expression; @code{ALLOCATE} and @code{DEALLOCATE}
845 optionally return an error message string via @code{ERRMSG=}.
847 @item Reallocation on assignment: If an intrinsic assignment is
848 used, an allocatable variable on the left-hand side is automatically allocated
849 (if unallocated) or reallocated (if the shape is different). Currently, scalar
850 deferred character length left-hand sides are correctly handled but arrays
851 are not yet fully implemented.
853 @item Deferred-length character variables and scalar deferred-length character
854 components of derived types are supported. (Note that array-valued compoents
855 are not yet implemented.)
857 @item Transferring of allocations via @code{MOVE_ALLOC}.
859 @item The @code{PRIVATE} and @code{PUBLIC} attributes may be given individually
860 to derived-type components.
862 @item In pointer assignments, the lower bound may be specified and
863 the remapping of elements is supported.
865 @item For pointers an @code{INTENT} may be specified which affect the
866 association status not the value of the pointer target.
868 @item Intrinsics @code{command_argument_count}, @code{get_command},
869 @code{get_command_argument}, and @code{get_environment_variable}.
871 @item Support for Unicode characters (ISO 10646) and UTF-8, including
872 the @code{SELECTED_CHAR_KIND} and @code{NEW_LINE} intrinsic functions.
874 @item Support for binary, octal and hexadecimal (BOZ) constants in the
875 intrinsic functions @code{INT}, @code{REAL}, @code{CMPLX} and @code{DBLE}.
877 @item Support for namelist variables with allocatable and pointer
878 attribute and nonconstant length type parameter.
880 @item
881 @cindex array, constructors
882 @cindex @code{[...]}
883 Array constructors using square brackets.  That is, @code{[...]} rather
884 than @code{(/.../)}.  Type-specification for array constructors like
885 @code{(/ some-type :: ... /)}.
887 @item Extensions to the specification and initialization expressions,
888 including the support for intrinsics with real and complex arguments.
890 @item Support for the asynchronous input/output syntax; however, the
891 data transfer is currently always synchronously performed. 
893 @item
894 @cindex @code{FLUSH} statement
895 @cindex statement, @code{FLUSH}
896 @code{FLUSH} statement.
898 @item
899 @cindex @code{IOMSG=} specifier
900 @code{IOMSG=} specifier for I/O statements.
902 @item
903 @cindex @code{ENUM} statement
904 @cindex @code{ENUMERATOR} statement
905 @cindex statement, @code{ENUM}
906 @cindex statement, @code{ENUMERATOR}
907 @opindex @code{fshort-enums}
908 Support for the declaration of enumeration constants via the
909 @code{ENUM} and @code{ENUMERATOR} statements.  Interoperability with
910 @command{gcc} is guaranteed also for the case where the
911 @command{-fshort-enums} command line option is given.
913 @item
914 @cindex TR 15581
915 TR 15581:
916 @itemize
917 @item
918 @cindex @code{ALLOCATABLE} dummy arguments
919 @code{ALLOCATABLE} dummy arguments.
920 @item
921 @cindex @code{ALLOCATABLE} function results
922 @code{ALLOCATABLE} function results
923 @item
924 @cindex @code{ALLOCATABLE} components of derived types
925 @code{ALLOCATABLE} components of derived types
926 @end itemize
928 @item
929 @cindex @code{STREAM} I/O
930 @cindex @code{ACCESS='STREAM'} I/O
931 The @code{OPEN} statement supports the @code{ACCESS='STREAM'} specifier,
932 allowing I/O without any record structure.
934 @item
935 Namelist input/output for internal files.
937 @item Minor I/O features: Rounding during formatted output, using of
938 a decimal comma instead of a decimal point, setting whether a plus sign
939 should appear for positive numbers. On systems where @code{strtod} honours
940 the rounding mode, the rounding mode is also supported for input.
942 @item
943 @cindex @code{PROTECTED} statement
944 @cindex statement, @code{PROTECTED}
945 The @code{PROTECTED} statement and attribute.
947 @item
948 @cindex @code{VALUE} statement
949 @cindex statement, @code{VALUE}
950 The @code{VALUE} statement and attribute.
952 @item
953 @cindex @code{VOLATILE} statement
954 @cindex statement, @code{VOLATILE}
955 The @code{VOLATILE} statement and attribute.
957 @item
958 @cindex @code{IMPORT} statement
959 @cindex statement, @code{IMPORT}
960 The @code{IMPORT} statement, allowing to import
961 host-associated derived types.
963 @item The intrinsic modules @code{ISO_FORTRAN_ENVIRONMENT} is supported,
964 which contains parameters of the I/O units, storage sizes. Additionally,
965 procedures for C interoperability are available in the @code{ISO_C_BINDING}
966 module.
968 @item
969 @cindex @code{USE, INTRINSIC} statement
970 @cindex statement, @code{USE, INTRINSIC}
971 @cindex @code{ISO_FORTRAN_ENV} statement
972 @cindex statement, @code{ISO_FORTRAN_ENV}
973 @code{USE} statement with @code{INTRINSIC} and @code{NON_INTRINSIC}
974 attribute; supported intrinsic modules: @code{ISO_FORTRAN_ENV},
975 @code{ISO_C_BINDING}, @code{OMP_LIB} and @code{OMP_LIB_KINDS},
976 and @code{OPENACC}.
978 @item
979 Renaming of operators in the @code{USE} statement.
981 @end itemize
984 @node Fortran 2008 status
985 @section Fortran 2008 status
987 The latest version of the Fortran standard is ISO/IEC 1539-1:2010, informally
988 known as Fortran 2008.  The official version is available from International
989 Organization for Standardization (ISO) or its national member organizations.
990 The the final draft (FDIS) can be downloaded free of charge from
991 @url{http://www.nag.co.uk/@/sc22wg5/@/links.html}.  Fortran is developed by the
992 Working Group 5 of Sub-Committee 22 of the Joint Technical Committee 1 of the
993 International Organization for Standardization and the International
994 Electrotechnical Commission (IEC).  This group is known as
995 @uref{http://www.nag.co.uk/sc22wg5/, WG5}.
997 The GNU Fortran compiler supports several of the new features of Fortran 2008;
998 the @uref{https://gcc.gnu.org/wiki/Fortran2008Status, wiki} has some information
999 about the current Fortran 2008 implementation status.  In particular, the
1000 following is implemented.
1002 @itemize
1003 @item The @option{-std=f2008} option and support for the file extensions 
1004 @file{.f08} and @file{.F08}.
1006 @item The @code{OPEN} statement now supports the @code{NEWUNIT=} option,
1007 which returns a unique file unit, thus preventing inadvertent use of the
1008 same unit in different parts of the program.
1010 @item The @code{g0} format descriptor and unlimited format items.
1012 @item The mathematical intrinsics @code{ASINH}, @code{ACOSH}, @code{ATANH},
1013 @code{ERF}, @code{ERFC}, @code{GAMMA}, @code{LOG_GAMMA}, @code{BESSEL_J0},
1014 @code{BESSEL_J1}, @code{BESSEL_JN}, @code{BESSEL_Y0}, @code{BESSEL_Y1},
1015 @code{BESSEL_YN}, @code{HYPOT}, @code{NORM2}, and @code{ERFC_SCALED}.
1017 @item Using complex arguments with @code{TAN}, @code{SINH}, @code{COSH},
1018 @code{TANH}, @code{ASIN}, @code{ACOS}, and @code{ATAN} is now possible;
1019 @code{ATAN}(@var{Y},@var{X}) is now an alias for @code{ATAN2}(@var{Y},@var{X}).
1021 @item Support of the @code{PARITY} intrinsic functions.
1023 @item The following bit intrinsics: @code{LEADZ} and @code{TRAILZ} for
1024 counting the number of leading and trailing zero bits, @code{POPCNT} and
1025 @code{POPPAR} for counting the number of one bits and returning the parity;
1026 @code{BGE}, @code{BGT}, @code{BLE}, and @code{BLT} for bitwise comparisons;
1027 @code{DSHIFTL} and @code{DSHIFTR} for combined left and right shifts,
1028 @code{MASKL} and @code{MASKR} for simple left and right justified masks,
1029 @code{MERGE_BITS} for a bitwise merge using a mask, @code{SHIFTA},
1030 @code{SHIFTL} and @code{SHIFTR} for shift operations, and the
1031 transformational bit intrinsics @code{IALL}, @code{IANY} and @code{IPARITY}.
1033 @item Support of the @code{EXECUTE_COMMAND_LINE} intrinsic subroutine.
1035 @item Support for the @code{STORAGE_SIZE} intrinsic inquiry function.
1037 @item The @code{INT@{8,16,32@}} and @code{REAL@{32,64,128@}} kind type
1038 parameters and the array-valued named constants @code{INTEGER_KINDS},
1039 @code{LOGICAL_KINDS}, @code{REAL_KINDS} and @code{CHARACTER_KINDS} of
1040 the intrinsic module @code{ISO_FORTRAN_ENV}.
1042 @item The module procedures @code{C_SIZEOF} of the intrinsic module
1043 @code{ISO_C_BINDINGS} and @code{COMPILER_VERSION} and @code{COMPILER_OPTIONS}
1044 of @code{ISO_FORTRAN_ENV}.
1046 @item Coarray support for serial programs with @option{-fcoarray=single} flag
1047 and experimental support for multiple images with the @option{-fcoarray=lib}
1048 flag.
1050 @item The @code{DO CONCURRENT} construct is supported.
1052 @item The @code{BLOCK} construct is supported.
1054 @item The @code{STOP} and the new @code{ERROR STOP} statements now
1055 support all constant expressions. Both show the signals which were signaling
1056 at termination.
1058 @item Support for the @code{CONTIGUOUS} attribute.
1060 @item Support for @code{ALLOCATE} with @code{MOLD}.
1062 @item Support for the @code{IMPURE} attribute for procedures, which
1063 allows for @code{ELEMENTAL} procedures without the restrictions of
1064 @code{PURE}.
1066 @item Null pointers (including @code{NULL()}) and not-allocated variables
1067 can be used as actual argument to optional non-pointer, non-allocatable
1068 dummy arguments, denoting an absent argument.
1070 @item Non-pointer variables with @code{TARGET} attribute can be used as
1071 actual argument to @code{POINTER} dummies with @code{INTENT(IN)}.
1073 @item Pointers including procedure pointers and those in a derived
1074 type (pointer components) can now be initialized by a target instead
1075 of only by @code{NULL}.
1077 @item The @code{EXIT} statement (with construct-name) can be now be
1078 used to leave not only the @code{DO} but also the @code{ASSOCIATE},
1079 @code{BLOCK}, @code{IF}, @code{SELECT CASE} and @code{SELECT TYPE}
1080 constructs.
1082 @item Internal procedures can now be used as actual argument.
1084 @item Minor features: obsolesce diagnostics for @code{ENTRY} with
1085 @option{-std=f2008}; a line may start with a semicolon; for internal
1086 and module procedures @code{END} can be used instead of
1087 @code{END SUBROUTINE} and @code{END FUNCTION}; @code{SELECTED_REAL_KIND}
1088 now also takes a @code{RADIX} argument; intrinsic types are supported
1089 for @code{TYPE}(@var{intrinsic-type-spec}); multiple type-bound procedures
1090 can be declared in a single @code{PROCEDURE} statement; implied-shape
1091 arrays are supported for named constants (@code{PARAMETER}).
1092 @end itemize
1096 @node TS 29113 status
1097 @section Technical Specification 29113 Status
1099 GNU Fortran supports some of the new features of the Technical
1100 Specification (TS) 29113 on Further Interoperability of Fortran with C.
1101 The @uref{https://gcc.gnu.org/wiki/TS29113Status, wiki} has some information
1102 about the current TS 29113 implementation status.  In particular, the
1103 following is implemented.
1105 See also @ref{Further Interoperability of Fortran with C}.
1107 @itemize
1108 @item The @option{-std=f2008ts} option.
1110 @item The @code{OPTIONAL} attribute is allowed for dummy arguments
1111 of @code{BIND(C) procedures.}
1113 @item The @code{RANK} intrinsic is supported.
1115 @item GNU Fortran's implementation for variables with @code{ASYNCHRONOUS}
1116 attribute is compatible with TS 29113.
1118 @item Assumed types (@code{TYPE(*)}.
1120 @item Assumed-rank (@code{DIMENSION(..)}). However, the array descriptor
1121 of the TS is not yet supported.
1122 @end itemize
1126 @c ---------------------------------------------------------------------
1127 @c Compiler Characteristics
1128 @c ---------------------------------------------------------------------
1130 @node Compiler Characteristics
1131 @chapter Compiler Characteristics
1133 This chapter describes certain characteristics of the GNU Fortran
1134 compiler, that are not specified by the Fortran standard, but which
1135 might in some way or another become visible to the programmer.
1137 @menu
1138 * KIND Type Parameters::
1139 * Internal representation of LOGICAL variables::
1140 * Thread-safety of the runtime library::
1141 * Data consistency and durability::
1142 @end menu
1145 @node KIND Type Parameters
1146 @section KIND Type Parameters
1147 @cindex kind
1149 The @code{KIND} type parameters supported by GNU Fortran for the primitive
1150 data types are:
1152 @table @code
1154 @item INTEGER
1155 1, 2, 4, 8*, 16*, default: 4**
1157 @item LOGICAL
1158 1, 2, 4, 8*, 16*, default: 4**
1160 @item REAL
1161 4, 8, 10*, 16*, default: 4***
1163 @item COMPLEX
1164 4, 8, 10*, 16*, default: 4***
1166 @item DOUBLE PRECISION
1167 4, 8, 10*, 16*, default: 8***
1169 @item CHARACTER
1170 1, 4, default: 1
1172 @end table
1174 @noindent
1175 * not available on all systems @*
1176 ** unless @option{-fdefault-integer-8} is used @*
1177 *** unless @option{-fdefault-real-8} is used (see @ref{Fortran Dialect Options})
1179 @noindent
1180 The @code{KIND} value matches the storage size in bytes, except for
1181 @code{COMPLEX} where the storage size is twice as much (or both real and
1182 imaginary part are a real value of the given size).  It is recommended to use
1183 the @ref{SELECTED_CHAR_KIND}, @ref{SELECTED_INT_KIND} and
1184 @ref{SELECTED_REAL_KIND} intrinsics or the @code{INT8}, @code{INT16},
1185 @code{INT32}, @code{INT64}, @code{REAL32}, @code{REAL64}, and @code{REAL128}
1186 parameters of the @code{ISO_FORTRAN_ENV} module instead of the concrete values.
1187 The available kind parameters can be found in the constant arrays
1188 @code{CHARACTER_KINDS}, @code{INTEGER_KINDS}, @code{LOGICAL_KINDS} and
1189 @code{REAL_KINDS} in the @ref{ISO_FORTRAN_ENV} module.  For C interoperability,
1190 the kind parameters of the @ref{ISO_C_BINDING} module should be used.
1193 @node Internal representation of LOGICAL variables
1194 @section Internal representation of LOGICAL variables
1195 @cindex logical, variable representation
1197 The Fortran standard does not specify how variables of @code{LOGICAL}
1198 type are represented, beyond requiring that @code{LOGICAL} variables
1199 of default kind have the same storage size as default @code{INTEGER}
1200 and @code{REAL} variables.  The GNU Fortran internal representation is
1201 as follows.
1203 A @code{LOGICAL(KIND=N)} variable is represented as an
1204 @code{INTEGER(KIND=N)} variable, however, with only two permissible
1205 values: @code{1} for @code{.TRUE.} and @code{0} for
1206 @code{.FALSE.}.  Any other integer value results in undefined behavior.
1208 See also @ref{Argument passing conventions} and @ref{Interoperability with C}.
1211 @node Thread-safety of the runtime library
1212 @section Thread-safety of the runtime library
1213 @cindex thread-safety, threads
1215 GNU Fortran can be used in programs with multiple threads, e.g.@: by
1216 using OpenMP, by calling OS thread handling functions via the
1217 @code{ISO_C_BINDING} facility, or by GNU Fortran compiled library code
1218 being called from a multi-threaded program.
1220 The GNU Fortran runtime library, (@code{libgfortran}), supports being
1221 called concurrently from multiple threads with the following
1222 exceptions. 
1224 During library initialization, the C @code{getenv} function is used,
1225 which need not be thread-safe.  Similarly, the @code{getenv}
1226 function is used to implement the @code{GET_ENVIRONMENT_VARIABLE} and
1227 @code{GETENV} intrinsics.  It is the responsibility of the user to
1228 ensure that the environment is not being updated concurrently when any
1229 of these actions are taking place.
1231 The @code{EXECUTE_COMMAND_LINE} and @code{SYSTEM} intrinsics are
1232 implemented with the @code{system} function, which need not be
1233 thread-safe.  It is the responsibility of the user to ensure that
1234 @code{system} is not called concurrently.
1236 For platforms not supporting thread-safe POSIX functions, further
1237 functionality might not be thread-safe.  For details, please consult
1238 the documentation for your operating system.
1240 The GNU Fortran runtime library uses various C library functions that
1241 depend on the locale, such as @code{strtod} and @code{snprintf}.  In
1242 order to work correctly in locale-aware programs that set the locale
1243 using @code{setlocale}, the locale is reset to the default ``C''
1244 locale while executing a formatted @code{READ} or @code{WRITE}
1245 statement.  On targets supporting the POSIX 2008 per-thread locale
1246 functions (e.g. @code{newlocale}, @code{uselocale},
1247 @code{freelocale}), these are used and thus the global locale set
1248 using @code{setlocale} or the per-thread locales in other threads are
1249 not affected.  However, on targets lacking this functionality, the
1250 global LC_NUMERIC locale is set to ``C'' during the formatted I/O.
1251 Thus, on such targets it's not safe to call @code{setlocale}
1252 concurrently from another thread while a Fortran formatted I/O
1253 operation is in progress.  Also, other threads doing something
1254 dependent on the LC_NUMERIC locale might not work correctly if a
1255 formatted I/O operation is in progress in another thread.
1257 @node Data consistency and durability
1258 @section Data consistency and durability
1259 @cindex consistency, durability
1261 This section contains a brief overview of data and metadata
1262 consistency and durability issues when doing I/O.
1264 With respect to durability, GNU Fortran makes no effort to ensure that
1265 data is committed to stable storage. If this is required, the GNU
1266 Fortran programmer can use the intrinsic @code{FNUM} to retrieve the
1267 low level file descriptor corresponding to an open Fortran unit. Then,
1268 using e.g. the @code{ISO_C_BINDING} feature, one can call the
1269 underlying system call to flush dirty data to stable storage, such as
1270 @code{fsync} on POSIX, @code{_commit} on MingW, or @code{fcntl(fd,
1271 F_FULLSYNC, 0)} on Mac OS X. The following example shows how to call
1272 fsync:
1274 @smallexample
1275   ! Declare the interface for POSIX fsync function
1276   interface
1277     function fsync (fd) bind(c,name="fsync")
1278     use iso_c_binding, only: c_int
1279       integer(c_int), value :: fd
1280       integer(c_int) :: fsync
1281     end function fsync
1282   end interface
1284   ! Variable declaration
1285   integer :: ret
1287   ! Opening unit 10
1288   open (10,file="foo")
1290   ! ...
1291   ! Perform I/O on unit 10
1292   ! ...
1294   ! Flush and sync
1295   flush(10)
1296   ret = fsync(fnum(10))
1298   ! Handle possible error
1299   if (ret /= 0) stop "Error calling FSYNC"
1300 @end smallexample
1302 With respect to consistency, for regular files GNU Fortran uses
1303 buffered I/O in order to improve performance. This buffer is flushed
1304 automatically when full and in some other situations, e.g. when
1305 closing a unit. It can also be explicitly flushed with the
1306 @code{FLUSH} statement. Also, the buffering can be turned off with the
1307 @code{GFORTRAN_UNBUFFERED_ALL} and
1308 @code{GFORTRAN_UNBUFFERED_PRECONNECTED} environment variables. Special
1309 files, such as terminals and pipes, are always unbuffered. Sometimes,
1310 however, further things may need to be done in order to allow other
1311 processes to see data that GNU Fortran has written, as follows.
1313 The Windows platform supports a relaxed metadata consistency model,
1314 where file metadata is written to the directory lazily. This means
1315 that, for instance, the @code{dir} command can show a stale size for a
1316 file. One can force a directory metadata update by closing the unit,
1317 or by calling @code{_commit} on the file descriptor. Note, though,
1318 that @code{_commit} will force all dirty data to stable storage, which
1319 is often a very slow operation.
1321 The Network File System (NFS) implements a relaxed consistency model
1322 called open-to-close consistency. Closing a file forces dirty data and
1323 metadata to be flushed to the server, and opening a file forces the
1324 client to contact the server in order to revalidate cached
1325 data. @code{fsync} will also force a flush of dirty data and metadata
1326 to the server. Similar to @code{open} and @code{close}, acquiring and
1327 releasing @code{fcntl} file locks, if the server supports them, will
1328 also force cache validation and flushing dirty data and metadata.
1331 @c ---------------------------------------------------------------------
1332 @c Extensions
1333 @c ---------------------------------------------------------------------
1335 @c Maybe this chapter should be merged with the 'Standards' section,
1336 @c whenever that is written :-)
1338 @node Extensions
1339 @chapter Extensions
1340 @cindex extensions
1342 The two sections below detail the extensions to standard Fortran that are
1343 implemented in GNU Fortran, as well as some of the popular or
1344 historically important extensions that are not (or not yet) implemented.
1345 For the latter case, we explain the alternatives available to GNU Fortran
1346 users, including replacement by standard-conforming code or GNU
1347 extensions.
1349 @menu
1350 * Extensions implemented in GNU Fortran::
1351 * Extensions not implemented in GNU Fortran::
1352 @end menu
1355 @node Extensions implemented in GNU Fortran
1356 @section Extensions implemented in GNU Fortran
1357 @cindex extensions, implemented
1359 GNU Fortran implements a number of extensions over standard
1360 Fortran.  This chapter contains information on their syntax and
1361 meaning.  There are currently two categories of GNU Fortran
1362 extensions, those that provide functionality beyond that provided
1363 by any standard, and those that are supported by GNU Fortran
1364 purely for backward compatibility with legacy compilers.  By default,
1365 @option{-std=gnu} allows the compiler to accept both types of
1366 extensions, but to warn about the use of the latter.  Specifying
1367 either @option{-std=f95}, @option{-std=f2003} or @option{-std=f2008}
1368 disables both types of extensions, and @option{-std=legacy} allows both
1369 without warning.
1371 @menu
1372 * Old-style kind specifications::
1373 * Old-style variable initialization::
1374 * Extensions to namelist::
1375 * X format descriptor without count field::
1376 * Commas in FORMAT specifications::
1377 * Missing period in FORMAT specifications::
1378 * I/O item lists::
1379 * @code{Q} exponent-letter::
1380 * BOZ literal constants::
1381 * Real array indices::
1382 * Unary operators::
1383 * Implicitly convert LOGICAL and INTEGER values::
1384 * Hollerith constants support::
1385 * Cray pointers::
1386 * CONVERT specifier::
1387 * OpenMP::
1388 * OpenACC::
1389 * Argument list functions::
1390 @end menu
1392 @node Old-style kind specifications
1393 @subsection Old-style kind specifications
1394 @cindex kind, old-style
1396 GNU Fortran allows old-style kind specifications in declarations.  These
1397 look like:
1398 @smallexample
1399       TYPESPEC*size x,y,z
1400 @end smallexample
1401 @noindent
1402 where @code{TYPESPEC} is a basic type (@code{INTEGER}, @code{REAL},
1403 etc.), and where @code{size} is a byte count corresponding to the
1404 storage size of a valid kind for that type.  (For @code{COMPLEX}
1405 variables, @code{size} is the total size of the real and imaginary
1406 parts.)  The statement then declares @code{x}, @code{y} and @code{z} to
1407 be of type @code{TYPESPEC} with the appropriate kind.  This is
1408 equivalent to the standard-conforming declaration
1409 @smallexample
1410       TYPESPEC(k) x,y,z
1411 @end smallexample
1412 @noindent
1413 where @code{k} is the kind parameter suitable for the intended precision.  As
1414 kind parameters are implementation-dependent, use the @code{KIND},
1415 @code{SELECTED_INT_KIND} and @code{SELECTED_REAL_KIND} intrinsics to retrieve
1416 the correct value, for instance @code{REAL*8 x} can be replaced by:
1417 @smallexample
1418 INTEGER, PARAMETER :: dbl = KIND(1.0d0)
1419 REAL(KIND=dbl) :: x
1420 @end smallexample
1422 @node Old-style variable initialization
1423 @subsection Old-style variable initialization
1425 GNU Fortran allows old-style initialization of variables of the
1426 form:
1427 @smallexample
1428       INTEGER i/1/,j/2/
1429       REAL x(2,2) /3*0.,1./
1430 @end smallexample
1431 The syntax for the initializers is as for the @code{DATA} statement, but
1432 unlike in a @code{DATA} statement, an initializer only applies to the
1433 variable immediately preceding the initialization.  In other words,
1434 something like @code{INTEGER I,J/2,3/} is not valid.  This style of
1435 initialization is only allowed in declarations without double colons
1436 (@code{::}); the double colons were introduced in Fortran 90, which also
1437 introduced a standard syntax for initializing variables in type
1438 declarations.
1440 Examples of standard-conforming code equivalent to the above example
1441 are:
1442 @smallexample
1443 ! Fortran 90
1444       INTEGER :: i = 1, j = 2
1445       REAL :: x(2,2) = RESHAPE((/0.,0.,0.,1./),SHAPE(x))
1446 ! Fortran 77
1447       INTEGER i, j
1448       REAL x(2,2)
1449       DATA i/1/, j/2/, x/3*0.,1./
1450 @end smallexample
1452 Note that variables which are explicitly initialized in declarations
1453 or in @code{DATA} statements automatically acquire the @code{SAVE}
1454 attribute.
1456 @node Extensions to namelist
1457 @subsection Extensions to namelist
1458 @cindex Namelist
1460 GNU Fortran fully supports the Fortran 95 standard for namelist I/O
1461 including array qualifiers, substrings and fully qualified derived types.
1462 The output from a namelist write is compatible with namelist read.  The
1463 output has all names in upper case and indentation to column 1 after the
1464 namelist name.  Two extensions are permitted:
1466 Old-style use of @samp{$} instead of @samp{&}
1467 @smallexample
1468 $MYNML
1469  X(:)%Y(2) = 1.0 2.0 3.0
1470  CH(1:4) = "abcd"
1471 $END
1472 @end smallexample
1474 It should be noted that the default terminator is @samp{/} rather than
1475 @samp{&END}.
1477 Querying of the namelist when inputting from stdin.  After at least
1478 one space, entering @samp{?} sends to stdout the namelist name and the names of
1479 the variables in the namelist:
1480 @smallexample
1483 &mynml
1485  x%y
1486  ch
1487 &end
1488 @end smallexample
1490 Entering @samp{=?} outputs the namelist to stdout, as if
1491 @code{WRITE(*,NML = mynml)} had been called:
1492 @smallexample
1495 &MYNML
1496  X(1)%Y=  0.000000    ,  1.000000    ,  0.000000    ,
1497  X(2)%Y=  0.000000    ,  2.000000    ,  0.000000    ,
1498  X(3)%Y=  0.000000    ,  3.000000    ,  0.000000    ,
1499  CH=abcd,  /
1500 @end smallexample
1502 To aid this dialog, when input is from stdin, errors send their
1503 messages to stderr and execution continues, even if @code{IOSTAT} is set.
1505 @code{PRINT} namelist is permitted.  This causes an error if
1506 @option{-std=f95} is used.
1507 @smallexample
1508 PROGRAM test_print
1509   REAL, dimension (4)  ::  x = (/1.0, 2.0, 3.0, 4.0/)
1510   NAMELIST /mynml/ x
1511   PRINT mynml
1512 END PROGRAM test_print
1513 @end smallexample
1515 Expanded namelist reads are permitted.  This causes an error if 
1516 @option{-std=f95} is used.  In the following example, the first element
1517 of the array will be given the value 0.00 and the two succeeding
1518 elements will be given the values 1.00 and 2.00.
1519 @smallexample
1520 &MYNML
1521   X(1,1) = 0.00 , 1.00 , 2.00
1523 @end smallexample
1525 When writing a namelist, if no @code{DELIM=} is specified, by default a
1526 double quote is used to delimit character strings. If -std=F95, F2003,
1527 or F2008, etc, the delim status is set to 'none'.  Defaulting to
1528 quotes ensures that namelists with character strings can be subsequently
1529 read back in accurately.
1531 @node X format descriptor without count field
1532 @subsection @code{X} format descriptor without count field
1534 To support legacy codes, GNU Fortran permits the count field of the
1535 @code{X} edit descriptor in @code{FORMAT} statements to be omitted.
1536 When omitted, the count is implicitly assumed to be one.
1538 @smallexample
1539        PRINT 10, 2, 3
1540 10     FORMAT (I1, X, I1)
1541 @end smallexample
1543 @node Commas in FORMAT specifications
1544 @subsection Commas in @code{FORMAT} specifications
1546 To support legacy codes, GNU Fortran allows the comma separator
1547 to be omitted immediately before and after character string edit
1548 descriptors in @code{FORMAT} statements.
1550 @smallexample
1551        PRINT 10, 2, 3
1552 10     FORMAT ('FOO='I1' BAR='I2)
1553 @end smallexample
1556 @node Missing period in FORMAT specifications
1557 @subsection Missing period in @code{FORMAT} specifications
1559 To support legacy codes, GNU Fortran allows missing periods in format
1560 specifications if and only if @option{-std=legacy} is given on the
1561 command line.  This is considered non-conforming code and is
1562 discouraged.
1564 @smallexample
1565        REAL :: value
1566        READ(*,10) value
1567 10     FORMAT ('F4')
1568 @end smallexample
1570 @node I/O item lists
1571 @subsection I/O item lists
1572 @cindex I/O item lists
1574 To support legacy codes, GNU Fortran allows the input item list
1575 of the @code{READ} statement, and the output item lists of the
1576 @code{WRITE} and @code{PRINT} statements, to start with a comma.
1578 @node @code{Q} exponent-letter
1579 @subsection @code{Q} exponent-letter
1580 @cindex @code{Q} exponent-letter
1582 GNU Fortran accepts real literal constants with an exponent-letter
1583 of @code{Q}, for example, @code{1.23Q45}.  The constant is interpreted
1584 as a @code{REAL(16)} entity on targets that support this type.  If
1585 the target does not support @code{REAL(16)} but has a @code{REAL(10)}
1586 type, then the real-literal-constant will be interpreted as a
1587 @code{REAL(10)} entity.  In the absence of @code{REAL(16)} and
1588 @code{REAL(10)}, an error will occur.
1590 @node BOZ literal constants
1591 @subsection BOZ literal constants
1592 @cindex BOZ literal constants
1594 Besides decimal constants, Fortran also supports binary (@code{b}),
1595 octal (@code{o}) and hexadecimal (@code{z}) integer constants.  The
1596 syntax is: @samp{prefix quote digits quote}, were the prefix is
1597 either @code{b}, @code{o} or @code{z}, quote is either @code{'} or
1598 @code{"} and the digits are for binary @code{0} or @code{1}, for
1599 octal between @code{0} and @code{7}, and for hexadecimal between
1600 @code{0} and @code{F}.  (Example: @code{b'01011101'}.)
1602 Up to Fortran 95, BOZ literals were only allowed to initialize
1603 integer variables in DATA statements.  Since Fortran 2003 BOZ literals
1604 are also allowed as argument of @code{REAL}, @code{DBLE}, @code{INT}
1605 and @code{CMPLX}; the result is the same as if the integer BOZ
1606 literal had been converted by @code{TRANSFER} to, respectively,
1607 @code{real}, @code{double precision}, @code{integer} or @code{complex}.
1608 As GNU Fortran extension the intrinsic procedures @code{FLOAT},
1609 @code{DFLOAT}, @code{COMPLEX} and @code{DCMPLX} are treated alike.
1611 As an extension, GNU Fortran allows hexadecimal BOZ literal constants to
1612 be specified using the @code{X} prefix, in addition to the standard
1613 @code{Z} prefix.  The BOZ literal can also be specified by adding a
1614 suffix to the string, for example, @code{Z'ABC'} and @code{'ABC'Z} are
1615 equivalent.
1617 Furthermore, GNU Fortran allows using BOZ literal constants outside
1618 DATA statements and the four intrinsic functions allowed by Fortran 2003.
1619 In DATA statements, in direct assignments, where the right-hand side
1620 only contains a BOZ literal constant, and for old-style initializers of
1621 the form @code{integer i /o'0173'/}, the constant is transferred
1622 as if @code{TRANSFER} had been used; for @code{COMPLEX} numbers, only
1623 the real part is initialized unless @code{CMPLX} is used.  In all other
1624 cases, the BOZ literal constant is converted to an @code{INTEGER} value with
1625 the largest decimal representation.  This value is then converted
1626 numerically to the type and kind of the variable in question.
1627 (For instance, @code{real :: r = b'0000001' + 1} initializes @code{r}
1628 with @code{2.0}.) As different compilers implement the extension
1629 differently, one should be careful when doing bitwise initialization
1630 of non-integer variables.
1632 Note that initializing an @code{INTEGER} variable with a statement such
1633 as @code{DATA i/Z'FFFFFFFF'/} will give an integer overflow error rather
1634 than the desired result of @math{-1} when @code{i} is a 32-bit integer
1635 on a system that supports 64-bit integers.  The @samp{-fno-range-check}
1636 option can be used as a workaround for legacy code that initializes
1637 integers in this manner.
1639 @node Real array indices
1640 @subsection Real array indices
1641 @cindex array, indices of type real
1643 As an extension, GNU Fortran allows the use of @code{REAL} expressions
1644 or variables as array indices.
1646 @node Unary operators
1647 @subsection Unary operators
1648 @cindex operators, unary
1650 As an extension, GNU Fortran allows unary plus and unary minus operators
1651 to appear as the second operand of binary arithmetic operators without
1652 the need for parenthesis.
1654 @smallexample
1655        X = Y * -Z
1656 @end smallexample
1658 @node Implicitly convert LOGICAL and INTEGER values
1659 @subsection Implicitly convert @code{LOGICAL} and @code{INTEGER} values
1660 @cindex conversion, to integer
1661 @cindex conversion, to logical
1663 As an extension for backwards compatibility with other compilers, GNU
1664 Fortran allows the implicit conversion of @code{LOGICAL} values to
1665 @code{INTEGER} values and vice versa.  When converting from a
1666 @code{LOGICAL} to an @code{INTEGER}, @code{.FALSE.} is interpreted as
1667 zero, and @code{.TRUE.} is interpreted as one.  When converting from
1668 @code{INTEGER} to @code{LOGICAL}, the value zero is interpreted as
1669 @code{.FALSE.} and any nonzero value is interpreted as @code{.TRUE.}.
1671 @smallexample
1672         LOGICAL :: l
1673         l = 1
1674 @end smallexample
1675 @smallexample
1676         INTEGER :: i
1677         i = .TRUE.
1678 @end smallexample
1680 However, there is no implicit conversion of @code{INTEGER} values in
1681 @code{if}-statements, nor of @code{LOGICAL} or @code{INTEGER} values
1682 in I/O operations.
1684 @node Hollerith constants support
1685 @subsection Hollerith constants support
1686 @cindex Hollerith constants
1688 GNU Fortran supports Hollerith constants in assignments, function
1689 arguments, and @code{DATA} and @code{ASSIGN} statements.  A Hollerith
1690 constant is written as a string of characters preceded by an integer
1691 constant indicating the character count, and the letter @code{H} or
1692 @code{h}, and stored in bytewise fashion in a numeric (@code{INTEGER},
1693 @code{REAL}, or @code{complex}) or @code{LOGICAL} variable.  The
1694 constant will be padded or truncated to fit the size of the variable in
1695 which it is stored.
1697 Examples of valid uses of Hollerith constants:
1698 @smallexample
1699       complex*16 x(2)
1700       data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/
1701       x(1) = 16HABCDEFGHIJKLMNOP
1702       call foo (4h abc)
1703 @end smallexample
1705 Invalid Hollerith constants examples:
1706 @smallexample
1707       integer*4 a
1708       a = 8H12345678 ! Valid, but the Hollerith constant will be truncated.
1709       a = 0H         ! At least one character is needed.
1710 @end smallexample
1712 In general, Hollerith constants were used to provide a rudimentary
1713 facility for handling character strings in early Fortran compilers,
1714 prior to the introduction of @code{CHARACTER} variables in Fortran 77;
1715 in those cases, the standard-compliant equivalent is to convert the
1716 program to use proper character strings.  On occasion, there may be a
1717 case where the intent is specifically to initialize a numeric variable
1718 with a given byte sequence.  In these cases, the same result can be
1719 obtained by using the @code{TRANSFER} statement, as in this example.
1720 @smallexample
1721       INTEGER(KIND=4) :: a
1722       a = TRANSFER ("abcd", a)     ! equivalent to: a = 4Habcd
1723 @end smallexample
1726 @node Cray pointers
1727 @subsection Cray pointers
1728 @cindex pointer, Cray
1730 Cray pointers are part of a non-standard extension that provides a
1731 C-like pointer in Fortran.  This is accomplished through a pair of
1732 variables: an integer "pointer" that holds a memory address, and a
1733 "pointee" that is used to dereference the pointer.
1735 Pointer/pointee pairs are declared in statements of the form:
1736 @smallexample
1737         pointer ( <pointer> , <pointee> )
1738 @end smallexample
1740 @smallexample
1741         pointer ( <pointer1> , <pointee1> ), ( <pointer2> , <pointee2> ), ...
1742 @end smallexample
1743 The pointer is an integer that is intended to hold a memory address.
1744 The pointee may be an array or scalar.  A pointee can be an assumed
1745 size array---that is, the last dimension may be left unspecified by
1746 using a @code{*} in place of a value---but a pointee cannot be an
1747 assumed shape array.  No space is allocated for the pointee.
1749 The pointee may have its type declared before or after the pointer
1750 statement, and its array specification (if any) may be declared
1751 before, during, or after the pointer statement.  The pointer may be
1752 declared as an integer prior to the pointer statement.  However, some
1753 machines have default integer sizes that are different than the size
1754 of a pointer, and so the following code is not portable:
1755 @smallexample
1756         integer ipt
1757         pointer (ipt, iarr)
1758 @end smallexample
1759 If a pointer is declared with a kind that is too small, the compiler
1760 will issue a warning; the resulting binary will probably not work
1761 correctly, because the memory addresses stored in the pointers may be
1762 truncated.  It is safer to omit the first line of the above example;
1763 if explicit declaration of ipt's type is omitted, then the compiler
1764 will ensure that ipt is an integer variable large enough to hold a
1765 pointer.
1767 Pointer arithmetic is valid with Cray pointers, but it is not the same
1768 as C pointer arithmetic.  Cray pointers are just ordinary integers, so
1769 the user is responsible for determining how many bytes to add to a
1770 pointer in order to increment it.  Consider the following example:
1771 @smallexample
1772         real target(10)
1773         real pointee(10)
1774         pointer (ipt, pointee)
1775         ipt = loc (target)
1776         ipt = ipt + 1       
1777 @end smallexample
1778 The last statement does not set @code{ipt} to the address of
1779 @code{target(1)}, as it would in C pointer arithmetic.  Adding @code{1}
1780 to @code{ipt} just adds one byte to the address stored in @code{ipt}.
1782 Any expression involving the pointee will be translated to use the
1783 value stored in the pointer as the base address.
1785 To get the address of elements, this extension provides an intrinsic
1786 function @code{LOC()}.  The @code{LOC()} function is equivalent to the
1787 @code{&} operator in C, except the address is cast to an integer type:
1788 @smallexample
1789         real ar(10)
1790         pointer(ipt, arpte(10))
1791         real arpte
1792         ipt = loc(ar)  ! Makes arpte is an alias for ar
1793         arpte(1) = 1.0 ! Sets ar(1) to 1.0
1794 @end smallexample
1795 The pointer can also be set by a call to the @code{MALLOC} intrinsic
1796 (see @ref{MALLOC}).
1798 Cray pointees often are used to alias an existing variable.  For
1799 example:
1800 @smallexample
1801         integer target(10)
1802         integer iarr(10)
1803         pointer (ipt, iarr)
1804         ipt = loc(target)
1805 @end smallexample
1806 As long as @code{ipt} remains unchanged, @code{iarr} is now an alias for
1807 @code{target}.  The optimizer, however, will not detect this aliasing, so
1808 it is unsafe to use @code{iarr} and @code{target} simultaneously.  Using
1809 a pointee in any way that violates the Fortran aliasing rules or
1810 assumptions is illegal.  It is the user's responsibility to avoid doing
1811 this; the compiler works under the assumption that no such aliasing
1812 occurs.
1814 Cray pointers will work correctly when there is no aliasing (i.e., when
1815 they are used to access a dynamically allocated block of memory), and
1816 also in any routine where a pointee is used, but any variable with which
1817 it shares storage is not used.  Code that violates these rules may not
1818 run as the user intends.  This is not a bug in the optimizer; any code
1819 that violates the aliasing rules is illegal.  (Note that this is not
1820 unique to GNU Fortran; any Fortran compiler that supports Cray pointers
1821 will ``incorrectly'' optimize code with illegal aliasing.)
1823 There are a number of restrictions on the attributes that can be applied
1824 to Cray pointers and pointees.  Pointees may not have the
1825 @code{ALLOCATABLE}, @code{INTENT}, @code{OPTIONAL}, @code{DUMMY},
1826 @code{TARGET}, @code{INTRINSIC}, or @code{POINTER} attributes.  Pointers
1827 may not have the @code{DIMENSION}, @code{POINTER}, @code{TARGET},
1828 @code{ALLOCATABLE}, @code{EXTERNAL}, or @code{INTRINSIC} attributes, nor
1829 may they be function results.  Pointees may not occur in more than one
1830 pointer statement.  A pointee cannot be a pointer.  Pointees cannot occur
1831 in equivalence, common, or data statements.
1833 A Cray pointer may also point to a function or a subroutine.  For
1834 example, the following excerpt is valid:
1835 @smallexample
1836   implicit none
1837   external sub
1838   pointer (subptr,subpte)
1839   external subpte
1840   subptr = loc(sub)
1841   call subpte()
1842   [...]
1843   subroutine sub
1844   [...]
1845   end subroutine sub
1846 @end smallexample
1848 A pointer may be modified during the course of a program, and this
1849 will change the location to which the pointee refers.  However, when
1850 pointees are passed as arguments, they are treated as ordinary
1851 variables in the invoked function.  Subsequent changes to the pointer
1852 will not change the base address of the array that was passed.
1854 @node CONVERT specifier
1855 @subsection @code{CONVERT} specifier
1856 @cindex @code{CONVERT} specifier
1858 GNU Fortran allows the conversion of unformatted data between little-
1859 and big-endian representation to facilitate moving of data
1860 between different systems.  The conversion can be indicated with
1861 the @code{CONVERT} specifier on the @code{OPEN} statement.
1862 @xref{GFORTRAN_CONVERT_UNIT}, for an alternative way of specifying
1863 the data format via an environment variable.
1865 Valid values for @code{CONVERT} are:
1866 @itemize @w{}
1867 @item @code{CONVERT='NATIVE'} Use the native format.  This is the default.
1868 @item @code{CONVERT='SWAP'} Swap between little- and big-endian.
1869 @item @code{CONVERT='LITTLE_ENDIAN'} Use the little-endian representation
1870 for unformatted files.
1871 @item @code{CONVERT='BIG_ENDIAN'} Use the big-endian representation for
1872 unformatted files.
1873 @end itemize
1875 Using the option could look like this:
1876 @smallexample
1877   open(file='big.dat',form='unformatted',access='sequential', &
1878        convert='big_endian')
1879 @end smallexample
1881 The value of the conversion can be queried by using
1882 @code{INQUIRE(CONVERT=ch)}.  The values returned are
1883 @code{'BIG_ENDIAN'} and @code{'LITTLE_ENDIAN'}.
1885 @code{CONVERT} works between big- and little-endian for
1886 @code{INTEGER} values of all supported kinds and for @code{REAL}
1887 on IEEE systems of kinds 4 and 8.  Conversion between different
1888 ``extended double'' types on different architectures such as
1889 m68k and x86_64, which GNU Fortran
1890 supports as @code{REAL(KIND=10)} and @code{REAL(KIND=16)}, will
1891 probably not work.
1893 @emph{Note that the values specified via the GFORTRAN_CONVERT_UNIT
1894 environment variable will override the CONVERT specifier in the
1895 open statement}.  This is to give control over data formats to
1896 users who do not have the source code of their program available.
1898 Using anything but the native representation for unformatted data
1899 carries a significant speed overhead.  If speed in this area matters
1900 to you, it is best if you use this only for data that needs to be
1901 portable.
1903 @node OpenMP
1904 @subsection OpenMP
1905 @cindex OpenMP
1907 OpenMP (Open Multi-Processing) is an application programming
1908 interface (API) that supports multi-platform shared memory 
1909 multiprocessing programming in C/C++ and Fortran on many 
1910 architectures, including Unix and Microsoft Windows platforms.
1911 It consists of a set of compiler directives, library routines,
1912 and environment variables that influence run-time behavior.
1914 GNU Fortran strives to be compatible to the 
1915 @uref{http://openmp.org/wp/openmp-specifications/,
1916 OpenMP Application Program Interface v4.0}.
1918 To enable the processing of the OpenMP directive @code{!$omp} in
1919 free-form source code; the @code{c$omp}, @code{*$omp} and @code{!$omp}
1920 directives in fixed form; the @code{!$} conditional compilation sentinels
1921 in free form; and the @code{c$}, @code{*$} and @code{!$} sentinels
1922 in fixed form, @command{gfortran} needs to be invoked with the
1923 @option{-fopenmp}.  This also arranges for automatic linking of the
1924 GNU Offloading and Multi Processing Runtime Library
1925 @ref{Top,,libgomp,libgomp,GNU Offloading and Multi Processing Runtime
1926 Library}.
1928 The OpenMP Fortran runtime library routines are provided both in a
1929 form of a Fortran 90 module named @code{omp_lib} and in a form of
1930 a Fortran @code{include} file named @file{omp_lib.h}.
1932 An example of a parallelized loop taken from Appendix A.1 of
1933 the OpenMP Application Program Interface v2.5:
1934 @smallexample
1935 SUBROUTINE A1(N, A, B)
1936   INTEGER I, N
1937   REAL B(N), A(N)
1938 !$OMP PARALLEL DO !I is private by default
1939   DO I=2,N
1940     B(I) = (A(I) + A(I-1)) / 2.0
1941   ENDDO
1942 !$OMP END PARALLEL DO
1943 END SUBROUTINE A1
1944 @end smallexample
1946 Please note:
1947 @itemize
1948 @item
1949 @option{-fopenmp} implies @option{-frecursive}, i.e., all local arrays
1950 will be allocated on the stack.  When porting existing code to OpenMP,
1951 this may lead to surprising results, especially to segmentation faults
1952 if the stacksize is limited.
1954 @item
1955 On glibc-based systems, OpenMP enabled applications cannot be statically
1956 linked due to limitations of the underlying pthreads-implementation.  It
1957 might be possible to get a working solution if 
1958 @command{-Wl,--whole-archive -lpthread -Wl,--no-whole-archive} is added
1959 to the command line.  However, this is not supported by @command{gcc} and
1960 thus not recommended.
1961 @end itemize
1963 @node OpenACC
1964 @subsection OpenACC
1965 @cindex OpenACC
1967 OpenACC is an application programming interface (API) that supports
1968 offloading of code to accelerator devices.  It consists of a set of
1969 compiler directives, library routines, and environment variables that
1970 influence run-time behavior.
1972 GNU Fortran strives to be compatible to the
1973 @uref{http://www.openacc.org/, OpenACC Application Programming
1974 Interface v2.0}.
1976 To enable the processing of the OpenACC directive @code{!$acc} in
1977 free-form source code; the @code{c$acc}, @code{*$acc} and @code{!$acc}
1978 directives in fixed form; the @code{!$} conditional compilation
1979 sentinels in free form; and the @code{c$}, @code{*$} and @code{!$}
1980 sentinels in fixed form, @command{gfortran} needs to be invoked with
1981 the @option{-fopenacc}.  This also arranges for automatic linking of
1982 the GNU Offloading and Multi Processing Runtime Library
1983 @ref{Top,,libgomp,libgomp,GNU Offloading and Multi Processing Runtime
1984 Library}.
1986 The OpenACC Fortran runtime library routines are provided both in a
1987 form of a Fortran 90 module named @code{openacc} and in a form of a
1988 Fortran @code{include} file named @file{openacc_lib.h}.
1990 Note that this is an experimental feature, incomplete, and subject to
1991 change in future versions of GCC.  See
1992 @uref{https://gcc.gnu.org/wiki/OpenACC} for more information.
1994 @node Argument list functions
1995 @subsection Argument list functions @code{%VAL}, @code{%REF} and @code{%LOC}
1996 @cindex argument list functions
1997 @cindex @code{%VAL}
1998 @cindex @code{%REF}
1999 @cindex @code{%LOC}
2001 GNU Fortran supports argument list functions @code{%VAL}, @code{%REF} 
2002 and @code{%LOC} statements, for backward compatibility with g77. 
2003 It is recommended that these should be used only for code that is 
2004 accessing facilities outside of GNU Fortran, such as operating system 
2005 or windowing facilities.  It is best to constrain such uses to isolated 
2006 portions of a program--portions that deal specifically and exclusively 
2007 with low-level, system-dependent facilities.  Such portions might well 
2008 provide a portable interface for use by the program as a whole, but are 
2009 themselves not portable, and should be thoroughly tested each time they 
2010 are rebuilt using a new compiler or version of a compiler.
2012 @code{%VAL} passes a scalar argument by value, @code{%REF} passes it by 
2013 reference and @code{%LOC} passes its memory location.  Since gfortran 
2014 already passes scalar arguments by reference, @code{%REF} is in effect 
2015 a do-nothing.  @code{%LOC} has the same effect as a Fortran pointer.
2017 An example of passing an argument by value to a C subroutine foo.:
2018 @smallexample
2020 C prototype      void foo_ (float x);
2022       external foo
2023       real*4 x
2024       x = 3.14159
2025       call foo (%VAL (x))
2026       end
2027 @end smallexample
2029 For details refer to the g77 manual
2030 @uref{https://gcc.gnu.org/@/onlinedocs/@/gcc-3.4.6/@/g77/@/index.html#Top}.
2032 Also, @code{c_by_val.f} and its partner @code{c_by_val.c} of the
2033 GNU Fortran testsuite are worth a look.
2036 @node Extensions not implemented in GNU Fortran
2037 @section Extensions not implemented in GNU Fortran
2038 @cindex extensions, not implemented
2040 The long history of the Fortran language, its wide use and broad
2041 userbase, the large number of different compiler vendors and the lack of
2042 some features crucial to users in the first standards have lead to the
2043 existence of a number of important extensions to the language.  While
2044 some of the most useful or popular extensions are supported by the GNU
2045 Fortran compiler, not all existing extensions are supported.  This section
2046 aims at listing these extensions and offering advice on how best make
2047 code that uses them running with the GNU Fortran compiler.
2049 @c More can be found here:
2050 @c   -- https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Missing-Features.html
2051 @c   -- the list of Fortran and libgfortran bugs closed as WONTFIX:
2052 @c      http://tinyurl.com/2u4h5y
2054 @menu
2055 * STRUCTURE and RECORD::
2056 @c * UNION and MAP::
2057 * ENCODE and DECODE statements::
2058 * Variable FORMAT expressions::
2059 @c * Q edit descriptor::
2060 @c * AUTOMATIC statement::
2061 @c * TYPE and ACCEPT I/O Statements::
2062 @c * .XOR. operator::
2063 @c * CARRIAGECONTROL, DEFAULTFILE, DISPOSE and RECORDTYPE I/O specifiers::
2064 @c * Omitted arguments in procedure call::
2065 * Alternate complex function syntax::
2066 * Volatile COMMON blocks::
2067 @end menu
2070 @node STRUCTURE and RECORD
2071 @subsection @code{STRUCTURE} and @code{RECORD}
2072 @cindex @code{STRUCTURE}
2073 @cindex @code{RECORD}
2075 Record structures are a pre-Fortran-90 vendor extension to create
2076 user-defined aggregate data types.  GNU Fortran does not support
2077 record structures, only Fortran 90's ``derived types'', which have
2078 a different syntax.
2080 In many cases, record structures can easily be converted to derived types.
2081 To convert, replace @code{STRUCTURE /}@var{structure-name}@code{/}
2082 by @code{TYPE} @var{type-name}.  Additionally, replace
2083 @code{RECORD /}@var{structure-name}@code{/} by
2084 @code{TYPE(}@var{type-name}@code{)}. Finally, in the component access,
2085 replace the period (@code{.}) by the percent sign (@code{%}).
2087 Here is an example of code using the non portable record structure syntax:
2089 @example
2090 ! Declaring a structure named ``item'' and containing three fields:
2091 ! an integer ID, an description string and a floating-point price.
2092 STRUCTURE /item/
2093   INTEGER id
2094   CHARACTER(LEN=200) description
2095   REAL price
2096 END STRUCTURE
2098 ! Define two variables, an single record of type ``item''
2099 ! named ``pear'', and an array of items named ``store_catalog''
2100 RECORD /item/ pear, store_catalog(100)
2102 ! We can directly access the fields of both variables
2103 pear.id = 92316
2104 pear.description = "juicy D'Anjou pear"
2105 pear.price = 0.15
2106 store_catalog(7).id = 7831
2107 store_catalog(7).description = "milk bottle"
2108 store_catalog(7).price = 1.2
2110 ! We can also manipulate the whole structure
2111 store_catalog(12) = pear
2112 print *, store_catalog(12)
2113 @end example
2115 @noindent
2116 This code can easily be rewritten in the Fortran 90 syntax as following:
2118 @example
2119 ! ``STRUCTURE /name/ ... END STRUCTURE'' becomes
2120 ! ``TYPE name ... END TYPE''
2121 TYPE item
2122   INTEGER id
2123   CHARACTER(LEN=200) description
2124   REAL price
2125 END TYPE
2127 ! ``RECORD /name/ variable'' becomes ``TYPE(name) variable''
2128 TYPE(item) pear, store_catalog(100)
2130 ! Instead of using a dot (.) to access fields of a record, the
2131 ! standard syntax uses a percent sign (%)
2132 pear%id = 92316
2133 pear%description = "juicy D'Anjou pear"
2134 pear%price = 0.15
2135 store_catalog(7)%id = 7831
2136 store_catalog(7)%description = "milk bottle"
2137 store_catalog(7)%price = 1.2
2139 ! Assignments of a whole variable do not change
2140 store_catalog(12) = pear
2141 print *, store_catalog(12)
2142 @end example
2145 @c @node UNION and MAP
2146 @c @subsection @code{UNION} and @code{MAP}
2147 @c @cindex @code{UNION}
2148 @c @cindex @code{MAP}
2150 @c For help writing this one, see
2151 @c http://www.eng.umd.edu/~nsw/ench250/fortran1.htm#UNION and
2152 @c http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u06.htm
2155 @node ENCODE and DECODE statements
2156 @subsection @code{ENCODE} and @code{DECODE} statements
2157 @cindex @code{ENCODE}
2158 @cindex @code{DECODE}
2160 GNU Fortran does not support the @code{ENCODE} and @code{DECODE}
2161 statements.  These statements are best replaced by @code{READ} and
2162 @code{WRITE} statements involving internal files (@code{CHARACTER}
2163 variables and arrays), which have been part of the Fortran standard since
2164 Fortran 77.  For example, replace a code fragment like
2166 @smallexample
2167       INTEGER*1 LINE(80)
2168       REAL A, B, C
2169 c     ... Code that sets LINE
2170       DECODE (80, 9000, LINE) A, B, C
2171  9000 FORMAT (1X, 3(F10.5))
2172 @end smallexample
2174 @noindent
2175 with the following:
2177 @smallexample
2178       CHARACTER(LEN=80) LINE
2179       REAL A, B, C
2180 c     ... Code that sets LINE
2181       READ (UNIT=LINE, FMT=9000) A, B, C
2182  9000 FORMAT (1X, 3(F10.5))
2183 @end smallexample
2185 Similarly, replace a code fragment like
2187 @smallexample
2188       INTEGER*1 LINE(80)
2189       REAL A, B, C
2190 c     ... Code that sets A, B and C
2191       ENCODE (80, 9000, LINE) A, B, C
2192  9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
2193 @end smallexample
2195 @noindent
2196 with the following:
2198 @smallexample
2199       CHARACTER(LEN=80) LINE
2200       REAL A, B, C
2201 c     ... Code that sets A, B and C
2202       WRITE (UNIT=LINE, FMT=9000) A, B, C
2203  9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
2204 @end smallexample
2207 @node Variable FORMAT expressions
2208 @subsection Variable @code{FORMAT} expressions
2209 @cindex @code{FORMAT}
2211 A variable @code{FORMAT} expression is format statement which includes
2212 angle brackets enclosing a Fortran expression: @code{FORMAT(I<N>)}.  GNU
2213 Fortran does not support this legacy extension.  The effect of variable
2214 format expressions can be reproduced by using the more powerful (and
2215 standard) combination of internal output and string formats.  For example,
2216 replace a code fragment like this:
2218 @smallexample
2219       WRITE(6,20) INT1
2220  20   FORMAT(I<N+1>)
2221 @end smallexample
2223 @noindent
2224 with the following:
2226 @smallexample
2227 c     Variable declaration
2228       CHARACTER(LEN=20) FMT
2229 c     
2230 c     Other code here...
2232       WRITE(FMT,'("(I", I0, ")")') N+1
2233       WRITE(6,FMT) INT1
2234 @end smallexample
2236 @noindent
2237 or with:
2239 @smallexample
2240 c     Variable declaration
2241       CHARACTER(LEN=20) FMT
2242 c     
2243 c     Other code here...
2245       WRITE(FMT,*) N+1
2246       WRITE(6,"(I" // ADJUSTL(FMT) // ")") INT1
2247 @end smallexample
2250 @node Alternate complex function syntax
2251 @subsection Alternate complex function syntax
2252 @cindex Complex function
2254 Some Fortran compilers, including @command{g77}, let the user declare
2255 complex functions with the syntax @code{COMPLEX FUNCTION name*16()}, as
2256 well as @code{COMPLEX*16 FUNCTION name()}.  Both are non-standard, legacy
2257 extensions.  @command{gfortran} accepts the latter form, which is more
2258 common, but not the former.
2261 @node Volatile COMMON blocks
2262 @subsection Volatile @code{COMMON} blocks
2263 @cindex @code{VOLATILE}
2264 @cindex @code{COMMON}
2266 Some Fortran compilers, including @command{g77}, let the user declare
2267 @code{COMMON} with the @code{VOLATILE} attribute. This is
2268 invalid standard Fortran syntax and is not supported by
2269 @command{gfortran}.  Note that @command{gfortran} accepts
2270 @code{VOLATILE} variables in @code{COMMON} blocks since revision 4.3.
2274 @c ---------------------------------------------------------------------
2275 @c Mixed-Language Programming
2276 @c ---------------------------------------------------------------------
2278 @node Mixed-Language Programming
2279 @chapter Mixed-Language Programming
2280 @cindex Interoperability
2281 @cindex Mixed-language programming
2283 @menu
2284 * Interoperability with C::
2285 * GNU Fortran Compiler Directives::
2286 * Non-Fortran Main Program::
2287 * Naming and argument-passing conventions::
2288 @end menu
2290 This chapter is about mixed-language interoperability, but also applies
2291 if one links Fortran code compiled by different compilers.  In most cases,
2292 use of the C Binding features of the Fortran 2003 standard is sufficient,
2293 and their use is highly recommended.
2296 @node Interoperability with C
2297 @section Interoperability with C
2299 @menu
2300 * Intrinsic Types::
2301 * Derived Types and struct::
2302 * Interoperable Global Variables::
2303 * Interoperable Subroutines and Functions::
2304 * Working with Pointers::
2305 * Further Interoperability of Fortran with C::
2306 @end menu
2308 Since Fortran 2003 (ISO/IEC 1539-1:2004(E)) there is a
2309 standardized way to generate procedure and derived-type
2310 declarations and global variables which are interoperable with C
2311 (ISO/IEC 9899:1999).  The @code{bind(C)} attribute has been added
2312 to inform the compiler that a symbol shall be interoperable with C;
2313 also, some constraints are added.  Note, however, that not
2314 all C features have a Fortran equivalent or vice versa.  For instance,
2315 neither C's unsigned integers nor C's functions with variable number
2316 of arguments have an equivalent in Fortran.
2318 Note that array dimensions are reversely ordered in C and that arrays in
2319 C always start with index 0 while in Fortran they start by default with
2320 1.  Thus, an array declaration @code{A(n,m)} in Fortran matches
2321 @code{A[m][n]} in C and accessing the element @code{A(i,j)} matches
2322 @code{A[j-1][i-1]}.  The element following @code{A(i,j)} (C: @code{A[j-1][i-1]};
2323 assuming @math{i < n}) in memory is @code{A(i+1,j)} (C: @code{A[j-1][i]}).
2325 @node Intrinsic Types
2326 @subsection Intrinsic Types
2328 In order to ensure that exactly the same variable type and kind is used
2329 in C and Fortran, the named constants shall be used which are defined in the
2330 @code{ISO_C_BINDING} intrinsic module.  That module contains named constants
2331 for kind parameters and character named constants for the escape sequences
2332 in C.  For a list of the constants, see @ref{ISO_C_BINDING}.
2334 For logical types, please note that the Fortran standard only guarantees
2335 interoperability between C99's @code{_Bool} and Fortran's @code{C_Bool}-kind
2336 logicals and C99 defines that @code{true} has the value 1 and @code{false}
2337 the value 0.  Using any other integer value with GNU Fortran's @code{LOGICAL}
2338 (with any kind parameter) gives an undefined result.  (Passing other integer
2339 values than 0 and 1 to GCC's @code{_Bool} is also undefined, unless the
2340 integer is explicitly or implicitly casted to @code{_Bool}.)
2344 @node Derived Types and struct
2345 @subsection Derived Types and struct
2347 For compatibility of derived types with @code{struct}, one needs to use
2348 the @code{BIND(C)} attribute in the type declaration.  For instance, the
2349 following type declaration
2351 @smallexample
2352  USE ISO_C_BINDING
2353  TYPE, BIND(C) :: myType
2354    INTEGER(C_INT) :: i1, i2
2355    INTEGER(C_SIGNED_CHAR) :: i3
2356    REAL(C_DOUBLE) :: d1
2357    COMPLEX(C_FLOAT_COMPLEX) :: c1
2358    CHARACTER(KIND=C_CHAR) :: str(5)
2359  END TYPE
2360 @end smallexample
2362 matches the following @code{struct} declaration in C
2364 @smallexample
2365  struct @{
2366    int i1, i2;
2367    /* Note: "char" might be signed or unsigned.  */
2368    signed char i3;
2369    double d1;
2370    float _Complex c1;
2371    char str[5];
2372  @} myType;
2373 @end smallexample
2375 Derived types with the C binding attribute shall not have the @code{sequence}
2376 attribute, type parameters, the @code{extends} attribute, nor type-bound
2377 procedures.  Every component must be of interoperable type and kind and may not
2378 have the @code{pointer} or @code{allocatable} attribute.  The names of the
2379 components are irrelevant for interoperability.
2381 As there exist no direct Fortran equivalents, neither unions nor structs
2382 with bit field or variable-length array members are interoperable.
2384 @node Interoperable Global Variables
2385 @subsection Interoperable Global Variables
2387 Variables can be made accessible from C using the C binding attribute,
2388 optionally together with specifying a binding name.  Those variables
2389 have to be declared in the declaration part of a @code{MODULE},
2390 be of interoperable type, and have neither the @code{pointer} nor
2391 the @code{allocatable} attribute.
2393 @smallexample
2394   MODULE m
2395     USE myType_module
2396     USE ISO_C_BINDING
2397     integer(C_INT), bind(C, name="_MyProject_flags") :: global_flag
2398     type(myType), bind(C) :: tp
2399   END MODULE
2400 @end smallexample
2402 Here, @code{_MyProject_flags} is the case-sensitive name of the variable
2403 as seen from C programs while @code{global_flag} is the case-insensitive
2404 name as seen from Fortran.  If no binding name is specified, as for
2405 @var{tp}, the C binding name is the (lowercase) Fortran binding name.
2406 If a binding name is specified, only a single variable may be after the
2407 double colon.  Note of warning: You cannot use a global variable to
2408 access @var{errno} of the C library as the C standard allows it to be
2409 a macro.  Use the @code{IERRNO} intrinsic (GNU extension) instead.
2411 @node Interoperable Subroutines and Functions
2412 @subsection Interoperable Subroutines and Functions
2414 Subroutines and functions have to have the @code{BIND(C)} attribute to
2415 be compatible with C.  The dummy argument declaration is relatively
2416 straightforward.  However, one needs to be careful because C uses
2417 call-by-value by default while Fortran behaves usually similar to
2418 call-by-reference.  Furthermore, strings and pointers are handled
2419 differently.  Note that in Fortran 2003 and 2008 only explicit size
2420 and assumed-size arrays are supported but not assumed-shape or
2421 deferred-shape (i.e. allocatable or pointer) arrays.  However, those
2422 are allowed since the Technical Specification 29113, see
2423 @ref{Further Interoperability of Fortran with C}
2425 To pass a variable by value, use the @code{VALUE} attribute.
2426 Thus, the following C prototype
2428 @smallexample
2429 @code{int func(int i, int *j)}
2430 @end smallexample
2432 matches the Fortran declaration
2434 @smallexample
2435   integer(c_int) function func(i,j)
2436     use iso_c_binding, only: c_int
2437     integer(c_int), VALUE :: i
2438     integer(c_int) :: j
2439 @end smallexample
2441 Note that pointer arguments also frequently need the @code{VALUE} attribute,
2442 see @ref{Working with Pointers}.
2444 Strings are handled quite differently in C and Fortran.  In C a string
2445 is a @code{NUL}-terminated array of characters while in Fortran each string
2446 has a length associated with it and is thus not terminated (by e.g.
2447 @code{NUL}).  For example, if one wants to use the following C function,
2449 @smallexample
2450   #include <stdio.h>
2451   void print_C(char *string) /* equivalent: char string[]  */
2452   @{
2453      printf("%s\n", string);
2454   @}
2455 @end smallexample
2457 to print ``Hello World'' from Fortran, one can call it using
2459 @smallexample
2460   use iso_c_binding, only: C_CHAR, C_NULL_CHAR
2461   interface
2462     subroutine print_c(string) bind(C, name="print_C")
2463       use iso_c_binding, only: c_char
2464       character(kind=c_char) :: string(*)
2465     end subroutine print_c
2466   end interface
2467   call print_c(C_CHAR_"Hello World"//C_NULL_CHAR)
2468 @end smallexample
2470 As the example shows, one needs to ensure that the
2471 string is @code{NUL} terminated.  Additionally, the dummy argument
2472 @var{string} of @code{print_C} is a length-one assumed-size
2473 array; using @code{character(len=*)} is not allowed.  The example
2474 above uses @code{c_char_"Hello World"} to ensure the string
2475 literal has the right type; typically the default character
2476 kind and @code{c_char} are the same and thus @code{"Hello World"}
2477 is equivalent.  However, the standard does not guarantee this.
2479 The use of strings is now further illustrated using the C library
2480 function @code{strncpy}, whose prototype is
2482 @smallexample
2483   char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
2484 @end smallexample
2486 The function @code{strncpy} copies at most @var{n} characters from
2487 string @var{s2} to @var{s1} and returns @var{s1}.  In the following
2488 example, we ignore the return value:
2490 @smallexample
2491   use iso_c_binding
2492   implicit none
2493   character(len=30) :: str,str2
2494   interface
2495     ! Ignore the return value of strncpy -> subroutine
2496     ! "restrict" is always assumed if we do not pass a pointer
2497     subroutine strncpy(dest, src, n) bind(C)
2498       import
2499       character(kind=c_char),  intent(out) :: dest(*)
2500       character(kind=c_char),  intent(in)  :: src(*)
2501       integer(c_size_t), value, intent(in) :: n
2502     end subroutine strncpy
2503   end interface
2504   str = repeat('X',30) ! Initialize whole string with 'X'
2505   call strncpy(str, c_char_"Hello World"//C_NULL_CHAR, &
2506                len(c_char_"Hello World",kind=c_size_t))
2507   print '(a)', str ! prints: "Hello WorldXXXXXXXXXXXXXXXXXXX"
2508   end
2509 @end smallexample
2511 The intrinsic procedures are described in @ref{Intrinsic Procedures}.
2513 @node Working with Pointers
2514 @subsection Working with Pointers
2516 C pointers are represented in Fortran via the special opaque derived type
2517 @code{type(c_ptr)} (with private components).  Thus one needs to
2518 use intrinsic conversion procedures to convert from or to C pointers.
2520 For some applications, using an assumed type (@code{TYPE(*)}) can be an
2521 alternative to a C pointer; see
2522 @ref{Further Interoperability of Fortran with C}.
2524 For example,
2526 @smallexample
2527   use iso_c_binding
2528   type(c_ptr) :: cptr1, cptr2
2529   integer, target :: array(7), scalar
2530   integer, pointer :: pa(:), ps
2531   cptr1 = c_loc(array(1)) ! The programmer needs to ensure that the
2532                           ! array is contiguous if required by the C
2533                           ! procedure
2534   cptr2 = c_loc(scalar)
2535   call c_f_pointer(cptr2, ps)
2536   call c_f_pointer(cptr2, pa, shape=[7])
2537 @end smallexample
2539 When converting C to Fortran arrays, the one-dimensional @code{SHAPE} argument
2540 has to be passed.
2542 If a pointer is a dummy-argument of an interoperable procedure, it usually
2543 has to be declared using the @code{VALUE} attribute.  @code{void*}
2544 matches @code{TYPE(C_PTR), VALUE}, while @code{TYPE(C_PTR)} alone
2545 matches @code{void**}.
2547 Procedure pointers are handled analogously to pointers; the C type is
2548 @code{TYPE(C_FUNPTR)} and the intrinsic conversion procedures are
2549 @code{C_F_PROCPOINTER} and @code{C_FUNLOC}.
2551 Let us consider two examples of actually passing a procedure pointer from
2552 C to Fortran and vice versa.  Note that these examples are also very
2553 similar to passing ordinary pointers between both languages. First,
2554 consider this code in C:
2556 @smallexample
2557 /* Procedure implemented in Fortran.  */
2558 void get_values (void (*)(double));
2560 /* Call-back routine we want called from Fortran.  */
2561 void
2562 print_it (double x)
2564   printf ("Number is %f.\n", x);
2567 /* Call Fortran routine and pass call-back to it.  */
2568 void
2569 foobar ()
2571   get_values (&print_it);
2573 @end smallexample
2575 A matching implementation for @code{get_values} in Fortran, that correctly
2576 receives the procedure pointer from C and is able to call it, is given
2577 in the following @code{MODULE}:
2579 @smallexample
2580 MODULE m
2581   IMPLICIT NONE
2583   ! Define interface of call-back routine.
2584   ABSTRACT INTERFACE
2585     SUBROUTINE callback (x)
2586       USE, INTRINSIC :: ISO_C_BINDING
2587       REAL(KIND=C_DOUBLE), INTENT(IN), VALUE :: x
2588     END SUBROUTINE callback
2589   END INTERFACE
2591 CONTAINS
2593   ! Define C-bound procedure.
2594   SUBROUTINE get_values (cproc) BIND(C)
2595     USE, INTRINSIC :: ISO_C_BINDING
2596     TYPE(C_FUNPTR), INTENT(IN), VALUE :: cproc
2598     PROCEDURE(callback), POINTER :: proc
2600     ! Convert C to Fortran procedure pointer.
2601     CALL C_F_PROCPOINTER (cproc, proc)
2603     ! Call it.
2604     CALL proc (1.0_C_DOUBLE)
2605     CALL proc (-42.0_C_DOUBLE)
2606     CALL proc (18.12_C_DOUBLE)
2607   END SUBROUTINE get_values
2609 END MODULE m
2610 @end smallexample
2612 Next, we want to call a C routine that expects a procedure pointer argument
2613 and pass it a Fortran procedure (which clearly must be interoperable!).
2614 Again, the C function may be:
2616 @smallexample
2618 call_it (int (*func)(int), int arg)
2620   return func (arg);
2622 @end smallexample
2624 It can be used as in the following Fortran code:
2626 @smallexample
2627 MODULE m
2628   USE, INTRINSIC :: ISO_C_BINDING
2629   IMPLICIT NONE
2631   ! Define interface of C function.
2632   INTERFACE
2633     INTEGER(KIND=C_INT) FUNCTION call_it (func, arg) BIND(C)
2634       USE, INTRINSIC :: ISO_C_BINDING
2635       TYPE(C_FUNPTR), INTENT(IN), VALUE :: func
2636       INTEGER(KIND=C_INT), INTENT(IN), VALUE :: arg
2637     END FUNCTION call_it
2638   END INTERFACE
2640 CONTAINS
2642   ! Define procedure passed to C function.
2643   ! It must be interoperable!
2644   INTEGER(KIND=C_INT) FUNCTION double_it (arg) BIND(C)
2645     INTEGER(KIND=C_INT), INTENT(IN), VALUE :: arg
2646     double_it = arg + arg
2647   END FUNCTION double_it
2649   ! Call C function.
2650   SUBROUTINE foobar ()
2651     TYPE(C_FUNPTR) :: cproc
2652     INTEGER(KIND=C_INT) :: i
2654     ! Get C procedure pointer.
2655     cproc = C_FUNLOC (double_it)
2657     ! Use it.
2658     DO i = 1_C_INT, 10_C_INT
2659       PRINT *, call_it (cproc, i)
2660     END DO
2661   END SUBROUTINE foobar
2663 END MODULE m
2664 @end smallexample
2666 @node Further Interoperability of Fortran with C
2667 @subsection Further Interoperability of Fortran with C
2669 The Technical Specification ISO/IEC TS 29113:2012 on further
2670 interoperability of Fortran with C extends the interoperability support
2671 of Fortran 2003 and Fortran 2008. Besides removing some restrictions
2672 and constraints, it adds assumed-type (@code{TYPE(*)}) and assumed-rank
2673 (@code{dimension}) variables and allows for interoperability of
2674 assumed-shape, assumed-rank and deferred-shape arrays, including
2675 allocatables and pointers.
2677 Note: Currently, GNU Fortran does not support the array descriptor
2678 (dope vector) as specified in the Technical Specification, but uses
2679 an array descriptor with different fields. The Chasm Language
2680 Interoperability Tools, @url{http://chasm-interop.sourceforge.net/},
2681 provide an interface to GNU Fortran's array descriptor.
2683 The Technical Specification adds the following new features, which
2684 are supported by GNU Fortran:
2686 @itemize @bullet
2688 @item The @code{ASYNCHRONOUS} attribute has been clarified and
2689 extended to allow its use with asynchronous communication in
2690 user-provided libraries such as in implementations of the
2691 Message Passing Interface specification.
2693 @item Many constraints have been relaxed, in particular for
2694 the @code{C_LOC} and @code{C_F_POINTER} intrinsics.
2696 @item The @code{OPTIONAL} attribute is now allowed for dummy
2697 arguments; an absent argument matches a @code{NULL} pointer.
2699 @item Assumed types (@code{TYPE(*)}) have been added, which may
2700 only be used for dummy arguments.  They are unlimited polymorphic
2701 but contrary to @code{CLASS(*)} they do not contain any type
2702 information, similar to C's @code{void *} pointers.  Expressions
2703 of any type and kind can be passed; thus, it can be used as
2704 replacement for @code{TYPE(C_PTR)}, avoiding the use of
2705 @code{C_LOC} in the caller.
2707 Note, however, that @code{TYPE(*)} only accepts scalar arguments,
2708 unless the @code{DIMENSION} is explicitly specified.  As
2709 @code{DIMENSION(*)} only supports array (including array elements) but
2710 no scalars, it is not a full replacement for @code{C_LOC}.  On the
2711 other hand, assumed-type assumed-rank dummy arguments
2712 (@code{TYPE(*), DIMENSION(..)}) allow for both scalars and arrays, but
2713 require special code on the callee side to handle the array descriptor.
2715 @item Assumed-rank arrays (@code{DIMENSION(..)}) as dummy argument
2716 allow that scalars and arrays of any rank can be passed as actual
2717 argument. As the Technical Specification does not provide for direct
2718 means to operate with them, they have to be used either from the C side
2719 or be converted using @code{C_LOC} and @code{C_F_POINTER} to scalars
2720 or arrays of a specific rank. The rank can be determined using the
2721 @code{RANK} intrinisic.
2722 @end itemize
2725 Currently unimplemented:
2727 @itemize @bullet
2729 @item GNU Fortran always uses an array descriptor, which does not
2730 match the one of the Technical Specification. The
2731 @code{ISO_Fortran_binding.h} header file and the C functions it
2732 specifies are not available.
2734 @item Using assumed-shape, assumed-rank and deferred-shape arrays in
2735 @code{BIND(C)} procedures is not fully supported. In particular,
2736 C interoperable strings of other length than one are not supported
2737 as this requires the new array descriptor.
2738 @end itemize
2741 @node GNU Fortran Compiler Directives
2742 @section GNU Fortran Compiler Directives
2744 The Fortran standard describes how a conforming program shall
2745 behave; however, the exact implementation is not standardized.  In order
2746 to allow the user to choose specific implementation details, compiler
2747 directives can be used to set attributes of variables and procedures
2748 which are not part of the standard.  Whether a given attribute is
2749 supported and its exact effects depend on both the operating system and
2750 on the processor; see
2751 @ref{Top,,C Extensions,gcc,Using the GNU Compiler Collection (GCC)}
2752 for details.
2754 For procedures and procedure pointers, the following attributes can
2755 be used to change the calling convention:
2757 @itemize
2758 @item @code{CDECL} -- standard C calling convention
2759 @item @code{STDCALL} -- convention where the called procedure pops the stack
2760 @item @code{FASTCALL} -- part of the arguments are passed via registers
2761 instead using the stack
2762 @end itemize
2764 Besides changing the calling convention, the attributes also influence
2765 the decoration of the symbol name, e.g., by a leading underscore or by
2766 a trailing at-sign followed by the number of bytes on the stack.  When
2767 assigning a procedure to a procedure pointer, both should use the same
2768 calling convention.
2770 On some systems, procedures and global variables (module variables and
2771 @code{COMMON} blocks) need special handling to be accessible when they
2772 are in a shared library.  The following attributes are available:
2774 @itemize
2775 @item @code{DLLEXPORT} -- provide a global pointer to a pointer in the DLL
2776 @item @code{DLLIMPORT} -- reference the function or variable using a
2777 global pointer
2778 @end itemize
2780 For dummy arguments, the @code{NO_ARG_CHECK} attribute can be used; in
2781 other compilers, it is also known as @code{IGNORE_TKR}.  For dummy arguments
2782 with this attribute actual arguments of any type and kind (similar to
2783 @code{TYPE(*)}), scalars and arrays of any rank (no equivalent
2784 in Fortran standard) are accepted.  As with @code{TYPE(*)}, the argument
2785 is unlimited polymorphic and no type information is available.
2786 Additionally, the argument may only be passed to dummy arguments
2787 with the @code{NO_ARG_CHECK} attribute and as argument to the
2788 @code{PRESENT} intrinsic function and to @code{C_LOC} of the
2789 @code{ISO_C_BINDING} module.
2791 Variables with @code{NO_ARG_CHECK} attribute shall be of assumed-type
2792 (@code{TYPE(*)}; recommended) or of type @code{INTEGER}, @code{LOGICAL},
2793 @code{REAL} or @code{COMPLEX}. They shall not have the @code{ALLOCATE},
2794 @code{CODIMENSION}, @code{INTENT(OUT)}, @code{POINTER} or @code{VALUE}
2795 attribute; furthermore, they shall be either scalar or of assumed-size
2796 (@code{dimension(*)}). As @code{TYPE(*)}, the @code{NO_ARG_CHECK} attribute
2797 requires an explicit interface.
2799 @itemize
2800 @item @code{NO_ARG_CHECK} -- disable the type, kind and rank checking
2801 @end itemize
2804 The attributes are specified using the syntax
2806 @code{!GCC$ ATTRIBUTES} @var{attribute-list} @code{::} @var{variable-list}
2808 where in free-form source code only whitespace is allowed before @code{!GCC$}
2809 and in fixed-form source code @code{!GCC$}, @code{cGCC$} or @code{*GCC$} shall
2810 start in the first column.
2812 For procedures, the compiler directives shall be placed into the body
2813 of the procedure; for variables and procedure pointers, they shall be in
2814 the same declaration part as the variable or procedure pointer.
2818 @node Non-Fortran Main Program
2819 @section Non-Fortran Main Program
2821 @menu
2822 * _gfortran_set_args:: Save command-line arguments
2823 * _gfortran_set_options:: Set library option flags
2824 * _gfortran_set_convert:: Set endian conversion
2825 * _gfortran_set_record_marker:: Set length of record markers
2826 * _gfortran_set_fpe:: Set when a Floating Point Exception should be raised
2827 * _gfortran_set_max_subrecord_length:: Set subrecord length
2828 @end menu
2830 Even if you are doing mixed-language programming, it is very
2831 likely that you do not need to know or use the information in this
2832 section.  Since it is about the internal structure of GNU Fortran,
2833 it may also change in GCC minor releases.
2835 When you compile a @code{PROGRAM} with GNU Fortran, a function
2836 with the name @code{main} (in the symbol table of the object file)
2837 is generated, which initializes the libgfortran library and then
2838 calls the actual program which uses the name @code{MAIN__}, for
2839 historic reasons.  If you link GNU Fortran compiled procedures
2840 to, e.g., a C or C++ program or to a Fortran program compiled by
2841 a different compiler, the libgfortran library is not initialized
2842 and thus a few intrinsic procedures do not work properly, e.g.
2843 those for obtaining the command-line arguments.
2845 Therefore, if your @code{PROGRAM} is not compiled with
2846 GNU Fortran and the GNU Fortran compiled procedures require
2847 intrinsics relying on the library initialization, you need to
2848 initialize the library yourself.  Using the default options,
2849 gfortran calls @code{_gfortran_set_args} and
2850 @code{_gfortran_set_options}.  The initialization of the former
2851 is needed if the called procedures access the command line
2852 (and for backtracing); the latter sets some flags based on the
2853 standard chosen or to enable backtracing.  In typical programs,
2854 it is not necessary to call any initialization function.
2856 If your @code{PROGRAM} is compiled with GNU Fortran, you shall
2857 not call any of the following functions.  The libgfortran
2858 initialization functions are shown in C syntax but using C
2859 bindings they are also accessible from Fortran.
2862 @node _gfortran_set_args
2863 @subsection @code{_gfortran_set_args} --- Save command-line arguments
2864 @fnindex _gfortran_set_args
2865 @cindex libgfortran initialization, set_args
2867 @table @asis
2868 @item @emph{Description}:
2869 @code{_gfortran_set_args} saves the command-line arguments; this
2870 initialization is required if any of the command-line intrinsics
2871 is called.  Additionally, it shall be called if backtracing is
2872 enabled (see @code{_gfortran_set_options}).
2874 @item @emph{Syntax}:
2875 @code{void _gfortran_set_args (int argc, char *argv[])}
2877 @item @emph{Arguments}:
2878 @multitable @columnfractions .15 .70
2879 @item @var{argc} @tab number of command line argument strings
2880 @item @var{argv} @tab the command-line argument strings; argv[0]
2881 is the pathname of the executable itself.
2882 @end multitable
2884 @item @emph{Example}:
2885 @smallexample
2886 int main (int argc, char *argv[])
2888   /* Initialize libgfortran.  */
2889   _gfortran_set_args (argc, argv);
2890   return 0;
2892 @end smallexample
2893 @end table
2896 @node _gfortran_set_options
2897 @subsection @code{_gfortran_set_options} --- Set library option flags
2898 @fnindex _gfortran_set_options
2899 @cindex libgfortran initialization, set_options
2901 @table @asis
2902 @item @emph{Description}:
2903 @code{_gfortran_set_options} sets several flags related to the Fortran
2904 standard to be used, whether backtracing should be enabled
2905 and whether range checks should be performed.  The syntax allows for
2906 upward compatibility since the number of passed flags is specified; for
2907 non-passed flags, the default value is used.  See also
2908 @pxref{Code Gen Options}.  Please note that not all flags are actually
2909 used.
2911 @item @emph{Syntax}:
2912 @code{void _gfortran_set_options (int num, int options[])}
2914 @item @emph{Arguments}:
2915 @multitable @columnfractions .15 .70
2916 @item @var{num} @tab number of options passed
2917 @item @var{argv} @tab The list of flag values
2918 @end multitable
2920 @item @emph{option flag list}:
2921 @multitable @columnfractions .15 .70
2922 @item @var{option}[0] @tab Allowed standard; can give run-time errors
2923 if e.g. an input-output edit descriptor is invalid in a given standard.
2924 Possible values are (bitwise or-ed) @code{GFC_STD_F77} (1),
2925 @code{GFC_STD_F95_OBS} (2), @code{GFC_STD_F95_DEL} (4), @code{GFC_STD_F95}
2926 (8), @code{GFC_STD_F2003} (16), @code{GFC_STD_GNU} (32),
2927 @code{GFC_STD_LEGACY} (64), @code{GFC_STD_F2008} (128),
2928 @code{GFC_STD_F2008_OBS} (256) and GFC_STD_F2008_TS (512). Default:
2929 @code{GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_F95 | GFC_STD_F2003
2930 | GFC_STD_F2008 | GFC_STD_F2008_TS | GFC_STD_F2008_OBS | GFC_STD_F77
2931 | GFC_STD_GNU | GFC_STD_LEGACY}.
2932 @item @var{option}[1] @tab Standard-warning flag; prints a warning to
2933 standard error.  Default: @code{GFC_STD_F95_DEL | GFC_STD_LEGACY}.
2934 @item @var{option}[2] @tab If non zero, enable pedantic checking.
2935 Default: off.
2936 @item @var{option}[3] @tab Unused.
2937 @item @var{option}[4] @tab If non zero, enable backtracing on run-time
2938 errors.  Default: off. (Default in the compiler: on.)
2939 Note: Installs a signal handler and requires command-line
2940 initialization using @code{_gfortran_set_args}.
2941 @item @var{option}[5] @tab If non zero, supports signed zeros.
2942 Default: enabled.
2943 @item @var{option}[6] @tab Enables run-time checking.  Possible values
2944 are (bitwise or-ed): GFC_RTCHECK_BOUNDS (1), GFC_RTCHECK_ARRAY_TEMPS (2),
2945 GFC_RTCHECK_RECURSION (4), GFC_RTCHECK_DO (16), GFC_RTCHECK_POINTER (32).
2946 Default: disabled.
2947 @item @var{option}[7] @tab Unused.
2948 @item @var{option}[8] @tab Show a warning when invoking @code{STOP} and
2949 @code{ERROR STOP} if a floating-point exception occurred. Possible values
2950 are (bitwise or-ed) @code{GFC_FPE_INVALID} (1), @code{GFC_FPE_DENORMAL} (2),
2951 @code{GFC_FPE_ZERO} (4), @code{GFC_FPE_OVERFLOW} (8),
2952 @code{GFC_FPE_UNDERFLOW} (16), @code{GFC_FPE_INEXACT} (32). Default: None (0).
2953 (Default in the compiler: @code{GFC_FPE_INVALID | GFC_FPE_DENORMAL |
2954 GFC_FPE_ZERO | GFC_FPE_OVERFLOW | GFC_FPE_UNDERFLOW}.)
2955 @end multitable
2957 @item @emph{Example}:
2958 @smallexample
2959   /* Use gfortran 4.9 default options.  */
2960   static int options[] = @{68, 511, 0, 0, 1, 1, 0, 0, 31@};
2961   _gfortran_set_options (9, &options);
2962 @end smallexample
2963 @end table
2966 @node _gfortran_set_convert
2967 @subsection @code{_gfortran_set_convert} --- Set endian conversion
2968 @fnindex _gfortran_set_convert
2969 @cindex libgfortran initialization, set_convert
2971 @table @asis
2972 @item @emph{Description}:
2973 @code{_gfortran_set_convert} set the representation of data for
2974 unformatted files.
2976 @item @emph{Syntax}:
2977 @code{void _gfortran_set_convert (int conv)}
2979 @item @emph{Arguments}:
2980 @multitable @columnfractions .15 .70
2981 @item @var{conv} @tab Endian conversion, possible values:
2982 GFC_CONVERT_NATIVE (0, default), GFC_CONVERT_SWAP (1),
2983 GFC_CONVERT_BIG (2), GFC_CONVERT_LITTLE (3).
2984 @end multitable
2986 @item @emph{Example}:
2987 @smallexample
2988 int main (int argc, char *argv[])
2990   /* Initialize libgfortran.  */
2991   _gfortran_set_args (argc, argv);
2992   _gfortran_set_convert (1);
2993   return 0;
2995 @end smallexample
2996 @end table
2999 @node _gfortran_set_record_marker
3000 @subsection @code{_gfortran_set_record_marker} --- Set length of record markers
3001 @fnindex _gfortran_set_record_marker
3002 @cindex libgfortran initialization, set_record_marker
3004 @table @asis
3005 @item @emph{Description}:
3006 @code{_gfortran_set_record_marker} sets the length of record markers
3007 for unformatted files.
3009 @item @emph{Syntax}:
3010 @code{void _gfortran_set_record_marker (int val)}
3012 @item @emph{Arguments}:
3013 @multitable @columnfractions .15 .70
3014 @item @var{val} @tab Length of the record marker; valid values
3015 are 4 and 8.  Default is 4.
3016 @end multitable
3018 @item @emph{Example}:
3019 @smallexample
3020 int main (int argc, char *argv[])
3022   /* Initialize libgfortran.  */
3023   _gfortran_set_args (argc, argv);
3024   _gfortran_set_record_marker (8);
3025   return 0;
3027 @end smallexample
3028 @end table
3031 @node _gfortran_set_fpe
3032 @subsection @code{_gfortran_set_fpe} --- Enable floating point exception traps
3033 @fnindex _gfortran_set_fpe
3034 @cindex libgfortran initialization, set_fpe
3036 @table @asis
3037 @item @emph{Description}:
3038 @code{_gfortran_set_fpe} enables floating point exception traps for
3039 the specified exceptions.  On most systems, this will result in a
3040 SIGFPE signal being sent and the program being aborted.
3042 @item @emph{Syntax}:
3043 @code{void _gfortran_set_fpe (int val)}
3045 @item @emph{Arguments}:
3046 @multitable @columnfractions .15 .70
3047 @item @var{option}[0] @tab IEEE exceptions.  Possible values are
3048 (bitwise or-ed) zero (0, default) no trapping,
3049 @code{GFC_FPE_INVALID} (1), @code{GFC_FPE_DENORMAL} (2),
3050 @code{GFC_FPE_ZERO} (4), @code{GFC_FPE_OVERFLOW} (8),
3051 @code{GFC_FPE_UNDERFLOW} (16), and @code{GFC_FPE_INEXACT} (32).
3052 @end multitable
3054 @item @emph{Example}:
3055 @smallexample
3056 int main (int argc, char *argv[])
3058   /* Initialize libgfortran.  */
3059   _gfortran_set_args (argc, argv);
3060   /* FPE for invalid operations such as SQRT(-1.0).  */
3061   _gfortran_set_fpe (1);
3062   return 0;
3064 @end smallexample
3065 @end table
3068 @node _gfortran_set_max_subrecord_length
3069 @subsection @code{_gfortran_set_max_subrecord_length} --- Set subrecord length
3070 @fnindex _gfortran_set_max_subrecord_length
3071 @cindex libgfortran initialization, set_max_subrecord_length
3073 @table @asis
3074 @item @emph{Description}:
3075 @code{_gfortran_set_max_subrecord_length} set the maximum length
3076 for a subrecord.  This option only makes sense for testing and
3077 debugging of unformatted I/O.
3079 @item @emph{Syntax}:
3080 @code{void _gfortran_set_max_subrecord_length (int val)}
3082 @item @emph{Arguments}:
3083 @multitable @columnfractions .15 .70
3084 @item @var{val} @tab the maximum length for a subrecord;
3085 the maximum permitted value is 2147483639, which is also
3086 the default.
3087 @end multitable
3089 @item @emph{Example}:
3090 @smallexample
3091 int main (int argc, char *argv[])
3093   /* Initialize libgfortran.  */
3094   _gfortran_set_args (argc, argv);
3095   _gfortran_set_max_subrecord_length (8);
3096   return 0;
3098 @end smallexample
3099 @end table
3102 @node Naming and argument-passing conventions
3103 @section Naming and argument-passing conventions
3105 This section gives an overview about the naming convention of procedures
3106 and global variables and about the argument passing conventions used by
3107 GNU Fortran.  If a C binding has been specified, the naming convention
3108 and some of the argument-passing conventions change.  If possible,
3109 mixed-language and mixed-compiler projects should use the better defined
3110 C binding for interoperability.  See @pxref{Interoperability with C}.
3112 @menu
3113 * Naming conventions::
3114 * Argument passing conventions::
3115 @end menu
3118 @node Naming conventions
3119 @subsection Naming conventions
3121 According the Fortran standard, valid Fortran names consist of a letter
3122 between @code{A} to @code{Z}, @code{a} to @code{z}, digits @code{0},
3123 @code{1} to @code{9} and underscores (@code{_}) with the restriction
3124 that names may only start with a letter.  As vendor extension, the
3125 dollar sign (@code{$}) is additionally permitted with the option
3126 @option{-fdollar-ok}, but not as first character and only if the
3127 target system supports it.
3129 By default, the procedure name is the lower-cased Fortran name with an
3130 appended underscore (@code{_}); using @option{-fno-underscoring} no
3131 underscore is appended while @code{-fsecond-underscore} appends two
3132 underscores.  Depending on the target system and the calling convention,
3133 the procedure might be additionally dressed; for instance, on 32bit
3134 Windows with @code{stdcall}, an at-sign @code{@@} followed by an integer
3135 number is appended.  For the changing the calling convention, see
3136 @pxref{GNU Fortran Compiler Directives}.
3138 For common blocks, the same convention is used, i.e. by default an
3139 underscore is appended to the lower-cased Fortran name.  Blank commons
3140 have the name @code{__BLNK__}.
3142 For procedures and variables declared in the specification space of a
3143 module, the name is formed by @code{__}, followed by the lower-cased
3144 module name, @code{_MOD_}, and the lower-cased Fortran name.  Note that
3145 no underscore is appended.
3148 @node Argument passing conventions
3149 @subsection Argument passing conventions
3151 Subroutines do not return a value (matching C99's @code{void}) while
3152 functions either return a value as specified in the platform ABI or
3153 the result variable is passed as hidden argument to the function and
3154 no result is returned.  A hidden result variable is used when the
3155 result variable is an array or of type @code{CHARACTER}.
3157 Arguments are passed according to the platform ABI. In particular,
3158 complex arguments might not be compatible to a struct with two real
3159 components for the real and imaginary part. The argument passing
3160 matches the one of C99's @code{_Complex}.  Functions with scalar
3161 complex result variables return their value and do not use a
3162 by-reference argument.  Note that with the @option{-ff2c} option,
3163 the argument passing is modified and no longer completely matches
3164 the platform ABI.  Some other Fortran compilers use @code{f2c}
3165 semantic by default; this might cause problems with
3166 interoperablility.
3168 GNU Fortran passes most arguments by reference, i.e. by passing a
3169 pointer to the data.  Note that the compiler might use a temporary
3170 variable into which the actual argument has been copied, if required
3171 semantically (copy-in/copy-out).
3173 For arguments with @code{ALLOCATABLE} and @code{POINTER}
3174 attribute (including procedure pointers), a pointer to the pointer
3175 is passed such that the pointer address can be modified in the
3176 procedure.
3178 For dummy arguments with the @code{VALUE} attribute: Scalar arguments
3179 of the type @code{INTEGER}, @code{LOGICAL}, @code{REAL} and
3180 @code{COMPLEX} are passed by value according to the platform ABI.
3181 (As vendor extension and not recommended, using @code{%VAL()} in the
3182 call to a procedure has the same effect.) For @code{TYPE(C_PTR)} and
3183 procedure pointers, the pointer itself is passed such that it can be
3184 modified without affecting the caller.
3185 @c FIXME: Document how VALUE is handled for CHARACTER, TYPE,
3186 @c CLASS and arrays, i.e. whether the copy-in is done in the caller
3187 @c or in the callee.
3189 For Boolean (@code{LOGICAL}) arguments, please note that GCC expects
3190 only the integer value 0 and 1.  If a GNU Fortran @code{LOGICAL}
3191 variable contains another integer value, the result is undefined.
3192 As some other Fortran compilers use @math{-1} for @code{.TRUE.},
3193 extra care has to be taken -- such as passing the value as
3194 @code{INTEGER}.  (The same value restriction also applies to other
3195 front ends of GCC, e.g. to GCC's C99 compiler for @code{_Bool}
3196 or GCC's Ada compiler for @code{Boolean}.)
3198 For arguments of @code{CHARACTER} type, the character length is passed
3199 as hidden argument.  For deferred-length strings, the value is passed
3200 by reference, otherwise by value.  The character length has the type
3201 @code{INTEGER(kind=4)}.  Note with C binding, @code{CHARACTER(len=1)}
3202 result variables are returned according to the platform ABI and no
3203 hidden length argument is used for dummy arguments; with @code{VALUE},
3204 those variables are passed by value.
3206 For @code{OPTIONAL} dummy arguments, an absent argument is denoted
3207 by a NULL pointer, except for scalar dummy arguments of type
3208 @code{INTEGER}, @code{LOGICAL}, @code{REAL} and @code{COMPLEX}
3209 which have the @code{VALUE} attribute.  For those, a hidden Boolean
3210 argument (@code{logical(kind=C_bool),value}) is used to indicate
3211 whether the argument is present.
3213 Arguments which are assumed-shape, assumed-rank or deferred-rank
3214 arrays or, with @option{-fcoarray=lib}, allocatable scalar coarrays use
3215 an array descriptor.  All other arrays pass the address of the
3216 first element of the array.  With @option{-fcoarray=lib}, the token
3217 and the offset belonging to nonallocatable coarrays dummy arguments
3218 are passed as hidden argument along the character length hidden
3219 arguments.  The token is an oparque pointer identifying the coarray
3220 and the offset is a passed-by-value integer of kind @code{C_PTRDIFF_T},
3221 denoting the byte offset between the base address of the coarray and
3222 the passed scalar or first element of the passed array.
3224 The arguments are passed in the following order
3225 @itemize @bullet
3226 @item Result variable, when the function result is passed by reference
3227 @item Character length of the function result, if it is a of type
3228 @code{CHARACTER} and no C binding is used
3229 @item The arguments in the order in which they appear in the Fortran
3230 declaration
3231 @item The the present status for optional arguments with value attribute,
3232 which are internally passed by value
3233 @item The character length and/or coarray token and offset for the first
3234 argument which is a @code{CHARACTER} or a nonallocatable coarray dummy
3235 argument, followed by the hidden arguments of the next dummy argument
3236 of such a type
3237 @end itemize
3240 @c ---------------------------------------------------------------------
3241 @c Coarray Programming
3242 @c ---------------------------------------------------------------------
3244 @node Coarray Programming
3245 @chapter Coarray Programming
3246 @cindex Coarrays
3248 @menu
3249 * Type and enum ABI Documentation::
3250 * Function ABI Documentation::
3251 @end menu
3254 @node Type and enum ABI Documentation
3255 @section Type and enum ABI Documentation
3257 @menu
3258 * caf_token_t::
3259 * caf_register_t::
3260 @end menu
3262 @node caf_token_t
3263 @subsection @code{caf_token_t}
3265 Typedef of type @code{void *} on the compiler side. Can be any data
3266 type on the library side.
3268 @node caf_register_t
3269 @subsection @code{caf_register_t}
3271 Indicates which kind of coarray variable should be registered.
3273 @verbatim
3274 typedef enum caf_register_t {
3275   CAF_REGTYPE_COARRAY_STATIC,
3276   CAF_REGTYPE_COARRAY_ALLOC,
3277   CAF_REGTYPE_LOCK_STATIC,
3278   CAF_REGTYPE_LOCK_ALLOC,
3279   CAF_REGTYPE_CRITICAL
3281 caf_register_t;
3282 @end verbatim
3285 @node Function ABI Documentation
3286 @section Function ABI Documentation
3288 @menu
3289 * _gfortran_caf_init:: Initialiation function
3290 * _gfortran_caf_finish:: Finalization function
3291 * _gfortran_caf_this_image:: Querying the image number
3292 * _gfortran_caf_num_images:: Querying the maximal number of images
3293 * _gfortran_caf_register:: Registering coarrays
3294 * _gfortran_caf_deregister:: Deregistering coarrays
3295 * _gfortran_caf_send:: Sending data from a local image to a remote image
3296 * _gfortran_caf_get:: Getting data from a remote image
3297 * _gfortran_caf_sendget:: Sending data between remote images
3298 * _gfortran_caf_lock:: Locking a lock variable
3299 * _gfortran_caf_unlock:: Unlocking a lock variable
3300 * _gfortran_caf_co_broadcast:: Sending data to all images
3301 * _gfortran_caf_co_max:: Collective maximum reduction
3302 * _gfortran_caf_co_min:: Collective minimum reduction
3303 * _gfortran_caf_co_sum:: Collective summing reduction
3304 * _gfortran_caf_co_reduce:: Generic collective reduction
3305 @end menu
3308 @node _gfortran_caf_init
3309 @subsection @code{_gfortran_caf_init} --- Initialiation function
3310 @cindex Coarray, _gfortran_caf_init
3312 @table @asis
3313 @item @emph{Description}:
3314 This function is called at startup of the program before the Fortran main
3315 program, if the latter has been compiled with @option{-fcoarray=lib}.
3316 It takes as arguments the command-line arguments of the program.  It is
3317 permitted to pass to @code{NULL} pointers as argument; if non-@code{NULL},
3318 the library is permitted to modify the arguments.
3320 @item @emph{Syntax}:
3321 @code{void _gfortran_caf_init (int *argc, char ***argv)}
3323 @item @emph{Arguments}:
3324 @multitable @columnfractions .15 .70
3325 @item @var{argc} @tab intent(inout) An integer pointer with the number of
3326 arguments passed to the program or @code{NULL}.
3327 @item @var{argv} @tab intent(inout) A pointer to an array of strings with the
3328 command-line arguments or @code{NULL}.
3329 @end multitable
3331 @item @emph{NOTES}
3332 The function is modelled after the initialization function of the Message
3333 Passing Interface (MPI) specification.  Due to the way coarray registration
3334 works, it might not be the first call to the libaray.  If the main program is
3335 not written in Fortran and only a library uses coarrays, it can happen that
3336 this function is never called.  Therefore, it is recommended that the library
3337 does not rely on the passed arguments and whether the call has been done.
3338 @end table
3341 @node _gfortran_caf_finish
3342 @subsection @code{_gfortran_caf_finish} --- Finalization function
3343 @cindex Coarray, _gfortran_caf_finish
3345 @table @asis
3346 @item @emph{Description}:
3347 This function is called at the end of the Fortran main program, if it has
3348 been compiled with the @option{-fcoarray=lib} option.
3350 @item @emph{Syntax}:
3351 @code{void _gfortran_caf_finish (void)}
3353 @item @emph{NOTES}
3354 For non-Fortran programs, it is recommended to call the function at the end
3355 of the main program.  To ensure that the shutdown is also performed for
3356 programs where this function is not explicitly invoked, for instance
3357 non-Fortran programs or calls to the system's exit() function, the library
3358 can use a destructor function.  Note that programs can also be terminated
3359 using the STOP and ERROR STOP statements; those use different library calls.
3360 @end table
3363 @node _gfortran_caf_this_image
3364 @subsection @code{_gfortran_caf_this_image} --- Querying the image number
3365 @cindex Coarray, _gfortran_caf_this_image
3367 @table @asis
3368 @item @emph{Description}:
3369 This function returns the current image number, which is a positive number.
3371 @item @emph{Syntax}:
3372 @code{int _gfortran_caf_this_image (int distance)}
3374 @item @emph{Arguments}:
3375 @multitable @columnfractions .15 .70
3376 @item @var{distance} @tab As specified for the @code{this_image} intrinsic
3377 in TS18508. Shall be a nonnegative number.
3378 @end multitable
3380 @item @emph{NOTES}
3381 If the Fortran intrinsic @code{this_image} is invoked without an argument, which
3382 is the only permitted form in Fortran 2008, GCC passes @code{0} as
3383 first argument.
3384 @end table
3387 @node _gfortran_caf_num_images
3388 @subsection @code{_gfortran_caf_num_images} --- Querying the maximal number of images
3389 @cindex Coarray, _gfortran_caf_num_images
3391 @table @asis
3392 @item @emph{Description}:
3393 This function returns the number of images in the current team, if
3394 @var{distance} is 0 or the number of images in the parent team at the specified
3395 distance. If failed is -1, the function returns the number of all images at
3396 the specified distance; if it is 0, the function returns the number of
3397 nonfailed images, and if it is 1, it returns the number of failed images.
3399 @item @emph{Syntax}:
3400 @code{int _gfortran_caf_num_images(int distance, int failed)}
3402 @item @emph{Arguments}:
3403 @multitable @columnfractions .15 .70
3404 @item @var{distance} @tab the distance from this image to the ancestor.
3405 Shall be positive.
3406 @item @var{failed} @tab shall be -1, 0, or 1
3407 @end multitable
3409 @item @emph{NOTES}
3410 This function follows TS18508. If the num_image intrinsic has no arguments,
3411 the the compiler passes @code{distance=0} and @code{failed=-1} to the function.
3412 @end table
3415 @node _gfortran_caf_register
3416 @subsection @code{_gfortran_caf_register} --- Registering coarrays
3417 @cindex Coarray, _gfortran_caf_deregister
3419 @table @asis
3420 @item @emph{Description}:
3421 Allocates memory for a coarray and creates a token to identify the coarray. The
3422 function is called for both coarrays with @code{SAVE} attribute and using an
3423 explicit @code{ALLOCATE} statement. If an error occurs and @var{STAT} is a
3424 @code{NULL} pointer, the function shall abort with printing an error message
3425 and starting the error termination.  If no error occurs and @var{STAT} is
3426 present, it shall be set to zero. Otherwise, it shall be set to a positive
3427 value and, if not-@code{NULL}, @var{ERRMSG} shall be set to a string describing
3428 the failure. The function shall return a pointer to the requested memory
3429 for the local image as a call to @code{malloc} would do.
3431 For @code{CAF_REGTYPE_COARRAY_STATIC} and @code{CAF_REGTYPE_COARRAY_ALLOC},
3432 the passed size is the byte size requested.  For @code{CAF_REGTYPE_LOCK_STATIC},
3433 @code{CAF_REGTYPE_LOCK_ALLOC} and @code{CAF_REGTYPE_CRITICAL} it is the array
3434 size or one for a scalar.
3437 @item @emph{Syntax}:
3438 @code{void *caf_register (size_t size, caf_register_t type, caf_token_t *token,
3439 int *stat, char *errmsg, int errmsg_len)}
3441 @item @emph{Arguments}:
3442 @multitable @columnfractions .15 .70
3443 @item @var{size} @tab For normal coarrays, the byte size of the coarray to be
3444 allocated; for lock types, the number of elements.
3445 @item @var{type} @tab one of the caf_register_t types.
3446 @item @var{token} @tab intent(out) An opaque pointer identifying the coarray.
3447 @item @var{stat} @tab intent(out) For allocatable coarrays, stores the STAT=;
3448 may be NULL
3449 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3450 an error message; may be NULL
3451 @item @var{errmsg_len} @tab the buffer size of errmsg.
3452 @end multitable
3454 @item @emph{NOTES}
3455 Nonalloatable coarrays have to be registered prior use from remote images.
3456 In order to guarantee this, they have to be registered before the main
3457 program. This can be achieved by creating constructor functions. That is what
3458 GCC does such that also nonallocatable coarrays the memory is allocated and no
3459 static memory is used.  The token permits to identify the coarray; to the
3460 processor, the token is a nonaliasing pointer. The library can, for instance,
3461 store the base address of the coarray in the token, some handle or a more
3462 complicated struct.
3464 For normal coarrays, the returned pointer is used for accesses on the local
3465 image. For lock types, the value shall only used for checking the allocation
3466 status. Note that for critical blocks, the locking is only required on one
3467 image; in the locking statement, the processor shall always pass always an
3468 image index of one for critical-block lock variables
3469 (@code{CAF_REGTYPE_CRITICAL}).
3470 @end table
3473 @node _gfortran_caf_deregister
3474 @subsection @code{_gfortran_caf_deregister} --- Deregistering coarrays
3475 @cindex Coarray, _gfortran_caf_deregister
3477 @table @asis
3478 @item @emph{Description}:
3479 Called to free the memory of a coarray; the processor calls this function for
3480 automatic and explicit deallocation.  In case of an error, this function shall
3481 fail with an error message, unless the @var{STAT} variable is not null.
3483 @item @emph{Syntax}:
3484 @code{void caf_deregister (const caf_token_t *token, int *stat, char *errmsg,
3485 int errmsg_len)}
3487 @item @emph{Arguments}:
3488 @multitable @columnfractions .15 .70
3489 @item @var{stat} @tab intent(out) For allocatable coarrays, stores the STAT=;
3490 may be NULL
3491 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set
3492 to an error message; may be NULL
3493 @item @var{errmsg_len} @tab the buffer size of errmsg.
3494 @end multitable
3496 @item @emph{NOTES}
3497 For nonalloatable coarrays this function is never called.  If a cleanup is
3498 required, it has to be handled via the finish, stop and error stop functions,
3499 and via destructors.
3500 @end table
3503 @node _gfortran_caf_send
3504 @subsection @code{_gfortran_caf_send} --- Sending data from a local image to a remote image
3505 @cindex Coarray, _gfortran_caf_send
3507 @table @asis
3508 @item @emph{Description}:
3509 Called to send a scalar, an array section or whole array from a local
3510 to a remote image identified by the image_index.
3512 @item @emph{Syntax}:
3513 @code{void _gfortran_caf_send (caf_token_t token, size_t offset,
3514 int image_index, gfc_descriptor_t *dest, caf_vector_t *dst_vector,
3515 gfc_descriptor_t *src, int dst_kind, int src_kind, bool may_require_tmp)}
3517 @item @emph{Arguments}:
3518 @multitable @columnfractions .15 .70
3519 @item @var{token} @tab intent(in)  An opaque pointer identifying the coarray.
3520 @item @var{offset} @tab By which amount of bytes the actual data is shifted
3521 compared to the base address of the coarray.
3522 @item @var{image_index} @tab The ID of the remote image; must be a positive
3523 number.
3524 @item @var{dest} @tab intent(in) Array descriptor for the remote image for the
3525 bounds and the size. The base_addr shall not be accessed.
3526 @item @var{dst_vector} @tab intent(int)  If not NULL, it contains the vector
3527 subscript of the destination array; the values are relative to the dimension
3528 triplet of the dest argument.
3529 @item @var{src} @tab intent(in) Array descriptor of the local array to be
3530 transferred to the remote image
3531 @item @var{dst_kind} @tab Kind of the destination argument
3532 @item @var{src_kind} @tab Kind of the source argument
3533 @item @var{may_require_tmp} @tab The variable is false it is known at compile
3534 time that the @var{dest} and @var{src} either cannot overlap or overlap (fully
3535 or partially) such that walking @var{src} and @var{dest} in element wise
3536 element order (honoring the stride value) will not lead to wrong results.
3537 Otherwise, the value is true.
3538 @end multitable
3540 @item @emph{NOTES}
3541 It is permitted to have image_id equal the current image; the memory of the
3542 send-to and the send-from might (partially) overlap in that case. The
3543 implementation has to take care that it handles this case, e.g. using
3544 @code{memmove} which handles (partially) overlapping memory. If
3545 @var{may_require_tmp} is true, the library might additionally create a
3546 temporary variable, unless additional checks show that this is not required
3547 (e.g. because walking backward is possible or because both arrays are
3548 contiguous and @code{memmove} takes care of overlap issues).
3550 Note that the assignment of a scalar to an array is permitted. In addition,
3551 the library has to handle numeric-type conversion and for strings, padding
3552 and different character kinds.
3553 @end table
3556 @node _gfortran_caf_get
3557 @subsection @code{_gfortran_caf_get} --- Getting data from a remote image
3558 @cindex Coarray, _gfortran_caf_get
3560 @table @asis
3561 @item @emph{Description}:
3562 Called to get an array section or whole array from a a remote,
3563 image identified by the image_index.
3565 @item @emph{Syntax}:
3566 @code{void _gfortran_caf_get_desc (caf_token_t token, size_t offset,
3567 int image_index, gfc_descriptor_t *src, caf_vector_t *src_vector,
3568 gfc_descriptor_t *dest, int src_kind, int dst_kind, bool may_require_tmp)}
3570 @item @emph{Arguments}:
3571 @multitable @columnfractions .15 .70
3572 @item @var{token} @tab intent(in)  An opaque pointer identifying the coarray.
3573 @item @var{offset} @tab By which amount of bytes the actual data is shifted
3574 compared to the base address of the coarray.
3575 @item @var{image_index} @tab The ID of the remote image; must be a positive
3576 number.
3577 @item @var{dest} @tab intent(in) Array descriptor of the local array to be
3578 transferred to the remote image
3579 @item @var{src} @tab intent(in) Array descriptor for the remote image for the
3580 bounds and the size. The base_addr shall not be accessed.
3581 @item @var{src_vector} @tab intent(int)  If not NULL, it contains the vector
3582 subscript of the destination array; the values are relative to the dimension
3583 triplet of the dest argument.
3584 @item @var{dst_kind} @tab Kind of the destination argument
3585 @item @var{src_kind} @tab Kind of the source argument
3586 @item @var{may_require_tmp} @tab The variable is false it is known at compile
3587 time that the @var{dest} and @var{src} either cannot overlap or overlap (fully
3588 or partially) such that walking @var{src} and @var{dest} in element wise
3589 element order (honoring the stride value) will not lead to wrong results.
3590 Otherwise, the value is true.
3591 @end multitable
3593 @item @emph{NOTES}
3594 It is permitted to have image_id equal the current image; the memory of the
3595 send-to and the send-from might (partially) overlap in that case. The
3596 implementation has to take care that it handles this case, e.g. using
3597 @code{memmove} which handles (partially) overlapping memory. If
3598 @var{may_require_tmp} is true, the library might additionally create a
3599 temporary variable, unless additional checks show that this is not required
3600 (e.g. because walking backward is possible or because both arrays are
3601 contiguous and @code{memmove} takes care of overlap issues).
3603 Note that the library has to handle numeric-type conversion and for strings,
3604 padding and different character kinds.
3605 @end table
3608 @node _gfortran_caf_sendget
3609 @subsection @code{_gfortran_caf_sendget} --- Sending data between remote images
3610 @cindex Coarray, _gfortran_caf_sendget
3612 @table @asis
3613 @item @emph{Description}:
3614 Called to send a scalar, an array section or whole array from a remote image
3615 identified by the src_image_index to a remote image identified by the
3616 dst_image_index.
3618 @item @emph{Syntax}:
3619 @code{void _gfortran_caf_sendget (caf_token_t dst_token, size_t dst_offset,
3620 int dst_image_index, gfc_descriptor_t *dest, caf_vector_t *dst_vector,
3621 caf_token_t src_token, size_t src_offset, int src_image_index,
3622 gfc_descriptor_t *src, caf_vector_t *src_vector, int dst_kind, int src_kind,
3623 bool may_require_tmp)}
3625 @item @emph{Arguments}:
3626 @multitable @columnfractions .15 .70
3627 @item @var{dst_token} @tab intent(in)  An opaque pointer identifying the
3628 destination coarray.
3629 @item @var{dst_offset} @tab  By which amount of bytes the actual data is
3630 shifted compared to the base address of the destination coarray.
3631 @item @var{dst_image_index} @tab The ID of the destination remote image; must
3632 be a positive number.
3633 @item @var{dest} @tab intent(in) Array descriptor for the destination
3634 remote image for the bounds and the size. The base_addr shall not be accessed.
3635 @item @var{dst_vector} @tab intent(int)  If not NULL, it contains the vector
3636 subscript of the destination array; the values are relative to the dimension
3637 triplet of the dest argument.
3638 @item @var{src_token} @tab An opaque pointer identifying the source coarray.
3639 @item @var{src_offset} @tab By which amount of bytes the actual data is shifted
3640 compared to the base address of the source coarray.
3641 @item @var{src_image_index} @tab The ID of the source remote image; must be a
3642 positive number.
3643 @item @var{src} @tab intent(in) Array descriptor of the local array to be
3644 transferred to the remote image.
3645 @item @var{src_vector} @tab intent(in) Array descriptor of the local array to
3646 be transferred to the remote image
3647 @item @var{dst_kind} @tab Kind of the destination argument
3648 @item @var{src_kind} @tab Kind of the source argument
3649 @item @var{may_require_tmp} @tab The variable is false it is known at compile
3650 time that the @var{dest} and @var{src} either cannot overlap or overlap (fully
3651 or partially) such that walking @var{src} and @var{dest} in element wise
3652 element order (honoring the stride value) will not lead to wrong results.
3653 Otherwise, the value is true.
3654 @end multitable
3656 @item @emph{NOTES}
3657 It is permitted to have image_ids equal; the memory of the send-to and the
3658 send-from might (partially) overlap in that case. The implementation has to
3659 take care that it handles this case, e.g. using @code{memmove} which handles
3660 (partially) overlapping memory. If @var{may_require_tmp} is true, the library
3661 might additionally create a temporary variable, unless additional checks show
3662 that this is not required (e.g. because walking backward is possible or because
3663 both arrays are contiguous and @code{memmove} takes care of overlap issues).
3665 Note that the assignment of a scalar to an array is permitted. In addition,
3666 the library has to handle numeric-type conversion and for strings, padding and
3667 different character kinds.
3668 @end table
3671 @node _gfortran_caf_lock
3672 @subsection @code{_gfortran_caf_lock} --- Locking a lock variable
3673 @cindex Coarray, _gfortran_caf_lock
3675 @table @asis
3676 @item @emph{Description}:
3677 Acquire a lock on the given image on a scalar locking variable or for the
3678 given array element for an array-valued variable. If the @var{aquired_lock}
3679 is @code{NULL}, the function return after having obtained the lock. If it is
3680 nonnull, the result is is assigned the value true (one) when the lock could be
3681 obtained and false (zero) otherwise.  Locking a lock variable which has already
3682 been locked by the same image is an error.
3684 @item @emph{Syntax}:
3685 @code{void _gfortran_caf_lock (caf_token_t token, size_t index, int image_index,
3686 int *aquired_lock, int *stat, char *errmsg, int errmsg_len)}
3688 @item @emph{Arguments}:
3689 @multitable @columnfractions .15 .70
3690 @item @var{token} @tab intent(in) An opaque pointer identifying the coarray.
3691 @item @var{index} @tab Array index; first array index is 0. For scalars, it is
3692 always 0.
3693 @item @var{image_index} @tab The ID of the remote image; must be a positive
3694 number.
3695 @item @var{aquired_lock} @tab intent(out) If not NULL, it returns whether lock
3696 could be obtained
3697 @item @var{stat} @tab intent(out) For allocatable coarrays, stores the STAT=;
3698 may be NULL
3699 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3700 an error message; may be NULL
3701 @item @var{errmsg_len} @tab the buffer size of errmsg.
3702 @end multitable
3704 @item @emph{NOTES}
3705 This function is also called for critical blocks; for those, the array index
3706 is always zero and the image index is one.  Libraries are permitted to use other
3707 images for critical-block locking variables.
3708 @end table
3711 @node _gfortran_caf_unlock
3712 @subsection @code{_gfortran_caf_lock} --- Unlocking a lock variable
3713 @cindex Coarray, _gfortran_caf_unlock
3715 @table @asis
3716 @item @emph{Description}:
3717 Release a lock on the given image on a scalar locking variable or for the
3718 given array element for an array-valued variable. Unlocking a lock variable
3719 which is unlocked or has been locked by a different image is an error.
3721 @item @emph{Syntax}:
3722 @code{void _gfortran_caf_unlock (caf_token_t token, size_t index, int image_index,
3723 int *stat, char *errmsg, int errmsg_len)}
3725 @item @emph{Arguments}:
3726 @multitable @columnfractions .15 .70
3727 @item @var{token} @tab intent(in) An opaque pointer identifying the coarray.
3728 @item @var{index} @tab Array index; first array index is 0. For scalars, it is
3729 always 0.
3730 @item @var{image_index} @tab The ID of the remote image; must be a positive
3731 number.
3732 @item @var{stat} @tab intent(out) For allocatable coarrays, stores the STAT=;
3733 may be NULL
3734 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3735 an error message; may be NULL
3736 @item @var{errmsg_len} @tab the buffer size of errmsg.
3737 @end multitable
3739 @item @emph{NOTES}
3740 This function is also called for critical block; for those, the array index
3741 is always zero and the image index is one.  Libraries are permitted to use other
3742 images for critical-block locking variables.
3743 @end table
3747 @node _gfortran_caf_co_broadcast
3748 @subsection @code{_gfortran_caf_co_broadcast} --- Sending data to all images
3749 @cindex Coarray, _gfortran_caf_co_broadcast
3751 @table @asis
3752 @item @emph{Description}:
3753 Distribute a value from a given image to all other images in the team. Has to
3754 be called collectively.
3756 @item @emph{Syntax}:
3757 @code{void _gfortran_caf_co_broadcast (gfc_descriptor_t *a,
3758 int source_image, int *stat, char *errmsg, int errmsg_len)}
3760 @item @emph{Arguments}:
3761 @multitable @columnfractions .15 .70
3762 @item @var{a} @tab intent(inout) And array descriptor with the data to be
3763 breoadcasted (on @var{source_image}) or to be received (other images).
3764 @item @var{source_image} @tab The ID of the image from which the data should
3765 be taken.
3766 @item @var{stat} @tab intent(out) Stores the status STAT= and my may be NULL.
3767 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3768 an error message; may be NULL
3769 @item @var{errmsg_len} @tab the buffer size of errmsg.
3770 @end multitable
3771 @end table
3775 @node _gfortran_caf_co_max
3776 @subsection @code{_gfortran_caf_co_max} --- Collective maximum reduction
3777 @cindex Coarray, _gfortran_caf_co_max
3779 @table @asis
3780 @item @emph{Description}:
3781 Calculates the for the each array element of the variable @var{a} the maximum
3782 value for that element in the current team; if @var{result_image} has the
3783 value 0, the result shall be stored on all images, otherwise, only on the
3784 specified image. This function operates on numeric values and character
3785 strings.
3787 @item @emph{Syntax}:
3788 @code{void _gfortran_caf_co_max (gfc_descriptor_t *a, int result_image,
3789 int *stat, char *errmsg, int a_len, int errmsg_len)}
3791 @item @emph{Arguments}:
3792 @multitable @columnfractions .15 .70
3793 @item @var{a} @tab intent(inout) And array descriptor with the data to be
3794 breoadcasted (on @var{source_image}) or to be received (other images).
3795 @item @var{result_image} @tab The ID of the image to which the reduced
3796 value should be copied to; if zero, it has to be copied to all images.
3797 @item @var{stat} @tab intent(out) Stores the status STAT= and my may be NULL.
3798 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3799 an error message; may be NULL
3800 @item @var{a_len} @tab The string length of argument @var{a}.
3801 @item @var{errmsg_len} @tab the buffer size of errmsg.
3802 @end multitable
3804 @item @emph{NOTES}
3805 If @var{result_image} is nonzero, the value on all images except of the
3806 specified one become undefined; hence, the library may make use of this.
3807 @end table
3811 @node _gfortran_caf_co_min
3812 @subsection @code{_gfortran_caf_co_min} --- Collective minimum reduction
3813 @cindex Coarray, _gfortran_caf_co_min
3815 @table @asis
3816 @item @emph{Description}:
3817 Calculates the for the each array element of the variable @var{a} the minimum
3818 value for that element in the current team; if @var{result_image} has the
3819 value 0, the result shall be stored on all images, otherwise, only on the
3820 specified image. This function operates on numeric values and character
3821 strings.
3823 @item @emph{Syntax}:
3824 @code{void _gfortran_caf_co_min (gfc_descriptor_t *a, int result_image,
3825 int *stat, char *errmsg, int a_len, int errmsg_len)}
3827 @item @emph{Arguments}:
3828 @multitable @columnfractions .15 .70
3829 @item @var{a} @tab intent(inout) And array descriptor with the data to be
3830 breoadcasted (on @var{source_image}) or to be received (other images).
3831 @item @var{result_image} @tab The ID of the image to which the reduced
3832 value should be copied to; if zero, it has to be copied to all images.
3833 @item @var{stat} @tab intent(out) Stores the status STAT= and my may be NULL.
3834 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3835 an error message; may be NULL
3836 @item @var{a_len} @tab The string length of argument @var{a}.
3837 @item @var{errmsg_len} @tab the buffer size of errmsg.
3838 @end multitable
3840 @item @emph{NOTES}
3841 If @var{result_image} is nonzero, the value on all images except of the
3842 specified one become undefined; hence, the library may make use of this.
3843 @end table
3847 @node _gfortran_caf_co_sum
3848 @subsection @code{_gfortran_caf_co_sum} --- Collective summing reduction
3849 @cindex Coarray, _gfortran_caf_co_sum
3851 @table @asis
3852 @item @emph{Description}:
3853 Calculates the for the each array element of the variable @var{a} the sum
3854 value for that element in the current team; if @var{result_image} has the
3855 value 0, the result shall be stored on all images, otherwise, only on the
3856 specified image. This function operates on numeric values.
3858 @item @emph{Syntax}:
3859 @code{void _gfortran_caf_co_sum (gfc_descriptor_t *a, int result_image,
3860 int *stat, char *errmsg, int errmsg_len)}
3862 @item @emph{Arguments}:
3863 @multitable @columnfractions .15 .70
3864 @item @var{a} @tab intent(inout) And array descriptor with the data to be
3865 breoadcasted (on @var{source_image}) or to be received (other images).
3866 @item @var{result_image} @tab The ID of the image to which the reduced
3867 value should be copied to; if zero, it has to be copied to all images.
3868 @item @var{stat} @tab intent(out) Stores the status STAT= and my may be NULL.
3869 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3870 an error message; may be NULL
3871 @item @var{errmsg_len} @tab the buffer size of errmsg.
3872 @end multitable
3874 @item @emph{NOTES}
3875 If @var{result_image} is nonzero, the value on all images except of the
3876 specified one become undefined; hence, the library may make use of this.
3877 @end table
3881 @node _gfortran_caf_co_reduce
3882 @subsection @code{_gfortran_caf_co_reduce} --- Generic collective reduction
3883 @cindex Coarray, _gfortran_caf_co_reduce
3885 @table @asis
3886 @item @emph{Description}:
3887 Calculates the for the each array element of the variable @var{a} the reduction
3888 value for that element in the current team; if @var{result_image} has the
3889 value 0, the result shall be stored on all images, otherwise, only on the
3890 specified image. The @var{opr} is a pure function doing a mathematically
3891 commutative and associative operation.
3893 The @var{opr_flags} denote the following; the values are bitwise ored.
3894 @code{GFC_CAF_BYREF} (1) if the result should be returned
3895 by value; @code{GFC_CAF_HIDDENLEN} (2) whether the result and argument
3896 string lengths shall be specified as hidden argument;
3897 @code{GFC_CAF_ARG_VALUE} (4) whether the arguments shall be passed by value,
3898 @code{GFC_CAF_ARG_DESC} (8) whether the arguments shall be passed by descriptor.
3901 @item @emph{Syntax}:
3902 @code{void _gfortran_caf_co_reduce (gfc_descriptor_t *a,
3903 void * (*opr) (void *, void *), int opr_flags, int result_image,
3904 int *stat, char *errmsg, int a_len, int errmsg_len)}
3906 @item @emph{Arguments}:
3907 @multitable @columnfractions .15 .70
3908 @item @var{opr} @tab Function pointer to the reduction function.
3909 @item @var{opr_flags} @tab Flags regarding the reduction function
3910 @item @var{a} @tab intent(inout) And array descriptor with the data to be
3911 breoadcasted (on @var{source_image}) or to be received (other images).
3912 @item @var{result_image} @tab The ID of the image to which the reduced
3913 value should be copied to; if zero, it has to be copied to all images.
3914 @item @var{stat} @tab intent(out) Stores the status STAT= and my may be NULL.
3915 @item @var{errmsg} @tab intent(out) When an error occurs, this will be set to
3916 an error message; may be NULL
3917 @item @var{a_len} @tab The string length of argument @var{a}.
3918 @item @var{errmsg_len} @tab the buffer size of errmsg.
3919 @end multitable
3921 @item @emph{NOTES}
3922 If @var{result_image} is nonzero, the value on all images except of the
3923 specified one become undefined; hence, the library may make use of this.
3924 For character arguments, the result is passed as first argument, followed
3925 by the result string length, next come the two string arguments, followed
3926 by the two hidden arguments. With C binding, there are no hidden arguments
3927 and by-reference passing and either only a single character is passed or
3928 an array descriptor.
3929 @end table
3932 @c Intrinsic Procedures
3933 @c ---------------------------------------------------------------------
3935 @include intrinsic.texi
3938 @tex
3939 \blankpart
3940 @end tex
3942 @c ---------------------------------------------------------------------
3943 @c Contributing
3944 @c ---------------------------------------------------------------------
3946 @node Contributing
3947 @unnumbered Contributing
3948 @cindex Contributing
3950 Free software is only possible if people contribute to efforts
3951 to create it.
3952 We're always in need of more people helping out with ideas
3953 and comments, writing documentation and contributing code.
3955 If you want to contribute to GNU Fortran,
3956 have a look at the long lists of projects you can take on.
3957 Some of these projects are small,
3958 some of them are large;
3959 some are completely orthogonal to the rest of what is
3960 happening on GNU Fortran,
3961 but others are ``mainstream'' projects in need of enthusiastic hackers.
3962 All of these projects are important!
3963 We will eventually get around to the things here,
3964 but they are also things doable by someone who is willing and able.
3966 @menu
3967 * Contributors::
3968 * Projects::
3969 * Proposed Extensions::
3970 @end menu
3973 @node Contributors
3974 @section Contributors to GNU Fortran
3975 @cindex Contributors
3976 @cindex Credits
3977 @cindex Authors
3979 Most of the parser was hand-crafted by @emph{Andy Vaught}, who is
3980 also the initiator of the whole project.  Thanks Andy!
3981 Most of the interface with GCC was written by @emph{Paul Brook}.
3983 The following individuals have contributed code and/or
3984 ideas and significant help to the GNU Fortran project
3985 (in alphabetical order):
3987 @itemize @minus
3988 @item Janne Blomqvist
3989 @item Steven Bosscher
3990 @item Paul Brook
3991 @item Tobias Burnus
3992 @item Fran@,{c}ois-Xavier Coudert
3993 @item Bud Davis
3994 @item Jerry DeLisle
3995 @item Erik Edelmann
3996 @item Bernhard Fischer
3997 @item Daniel Franke
3998 @item Richard Guenther
3999 @item Richard Henderson
4000 @item Katherine Holcomb
4001 @item Jakub Jelinek
4002 @item Niels Kristian Bech Jensen
4003 @item Steven Johnson
4004 @item Steven G. Kargl
4005 @item Thomas Koenig
4006 @item Asher Langton
4007 @item H. J. Lu
4008 @item Toon Moene
4009 @item Brooks Moses
4010 @item Andrew Pinski
4011 @item Tim Prince
4012 @item Christopher D. Rickett
4013 @item Richard Sandiford
4014 @item Tobias Schl@"uter
4015 @item Roger Sayle
4016 @item Paul Thomas
4017 @item Andy Vaught
4018 @item Feng Wang
4019 @item Janus Weil
4020 @item Daniel Kraft
4021 @end itemize
4023 The following people have contributed bug reports,
4024 smaller or larger patches,
4025 and much needed feedback and encouragement for the
4026 GNU Fortran project: 
4028 @itemize @minus
4029 @item Bill Clodius
4030 @item Dominique d'Humi@`eres
4031 @item Kate Hedstrom
4032 @item Erik Schnetter
4033 @item Joost VandeVondele
4034 @end itemize
4036 Many other individuals have helped debug,
4037 test and improve the GNU Fortran compiler over the past few years,
4038 and we welcome you to do the same!
4039 If you already have done so,
4040 and you would like to see your name listed in the
4041 list above, please contact us.
4044 @node Projects
4045 @section Projects
4047 @table @emph
4049 @item Help build the test suite
4050 Solicit more code for donation to the test suite: the more extensive the
4051 testsuite, the smaller the risk of breaking things in the future! We can
4052 keep code private on request.
4054 @item Bug hunting/squishing
4055 Find bugs and write more test cases! Test cases are especially very
4056 welcome, because it allows us to concentrate on fixing bugs instead of
4057 isolating them.  Going through the bugzilla database at
4058 @url{https://gcc.gnu.org/@/bugzilla/} to reduce testcases posted there and
4059 add more information (for example, for which version does the testcase
4060 work, for which versions does it fail?) is also very helpful.
4062 @end table
4065 @node Proposed Extensions
4066 @section Proposed Extensions
4068 Here's a list of proposed extensions for the GNU Fortran compiler, in no particular
4069 order.  Most of these are necessary to be fully compatible with
4070 existing Fortran compilers, but they are not part of the official
4071 J3 Fortran 95 standard.
4073 @subsection Compiler extensions:
4074 @itemize @bullet
4075 @item
4076 User-specified alignment rules for structures.
4078 @item
4079 Automatically extend single precision constants to double.
4081 @item
4082 Compile code that conserves memory by dynamically allocating common and
4083 module storage either on stack or heap.
4085 @item
4086 Compile flag to generate code for array conformance checking (suggest -CC).
4088 @item
4089 User control of symbol names (underscores, etc).
4091 @item
4092 Compile setting for maximum size of stack frame size before spilling
4093 parts to static or heap.
4095 @item
4096 Flag to force local variables into static space.
4098 @item
4099 Flag to force local variables onto stack.
4100 @end itemize
4103 @subsection Environment Options
4104 @itemize @bullet
4105 @item
4106 Pluggable library modules for random numbers, linear algebra.
4107 LA should use BLAS calling conventions.
4109 @item
4110 Environment variables controlling actions on arithmetic exceptions like
4111 overflow, underflow, precision loss---Generate NaN, abort, default.
4112 action.
4114 @item
4115 Set precision for fp units that support it (i387).
4117 @item
4118 Variable for setting fp rounding mode.
4120 @item
4121 Variable to fill uninitialized variables with a user-defined bit
4122 pattern.
4124 @item
4125 Environment variable controlling filename that is opened for that unit
4126 number.
4128 @item
4129 Environment variable to clear/trash memory being freed.
4131 @item
4132 Environment variable to control tracing of allocations and frees.
4134 @item
4135 Environment variable to display allocated memory at normal program end.
4137 @item
4138 Environment variable for filename for * IO-unit.
4140 @item
4141 Environment variable for temporary file directory.
4143 @item
4144 Environment variable forcing standard output to be line buffered (Unix).
4146 @end itemize
4149 @c ---------------------------------------------------------------------
4150 @c GNU General Public License
4151 @c ---------------------------------------------------------------------
4153 @include gpl_v3.texi
4157 @c ---------------------------------------------------------------------
4158 @c GNU Free Documentation License
4159 @c ---------------------------------------------------------------------
4161 @include fdl.texi
4165 @c ---------------------------------------------------------------------
4166 @c Funding Free Software
4167 @c ---------------------------------------------------------------------
4169 @include funding.texi
4171 @c ---------------------------------------------------------------------
4172 @c Indices
4173 @c ---------------------------------------------------------------------
4175 @node Option Index
4176 @unnumbered Option Index
4177 @command{gfortran}'s command line options are indexed here without any
4178 initial @samp{-} or @samp{--}.  Where an option has both positive and
4179 negative forms (such as -foption and -fno-option), relevant entries in
4180 the manual are indexed under the most appropriate form; it may sometimes
4181 be useful to look up both forms.
4182 @printindex op
4184 @node Keyword Index
4185 @unnumbered Keyword Index
4186 @printindex cp
4188 @bye