..
Copyright 1988-2022 Free Software Foundation, Inc.
This is part of the GCC manual.
For copying conditions, see the copyright.rst file.
.. index:: Standards
.. _standards:
Standards
*********
Fortran is developed by the Working Group 5 of Sub-Committee 22 of the
Joint Technical Committee 1 of the International Organization for
Standardization and the International Electrotechnical Commission (IEC).
This group is known as `WG5 `_.
Official Fortran standard documents are available for purchase
from ISO; a collection of free documents (typically final drafts) are
also available on the `wiki `_.
The GNU Fortran compiler implements ISO/IEC 1539:1997 (Fortran 95).
As such, it can also compile essentially all standard-compliant
Fortran 90 and Fortran 77 programs. It also supports the ISO/IEC
TR-15581 enhancements to allocatable arrays.
GNU Fortran also supports almost all of ISO/IEC 1539-1:2004
(Fortran 2003) and ISO/IEC 1539-1:2010 (Fortran 2008).
It has partial support for features introduced in ISO/IEC
1539:2018 (Fortran 2018), the most recent version of the Fortran
language standard, including full support for the Technical Specification
``Further Interoperability of Fortran with C`` (ISO/IEC TS 29113:2012).
More details on support for these standards can be
found in the following sections of the documentation.
Additionally, the GNU Fortran compilers supports the OpenMP specification
(version 4.5 and partial support of the features of the 5.0 version,
https://openmp.org/specifications/).
There also is support for the OpenACC specification (targeting
version 2.6, https://www.openacc.org/). See
https://gcc.gnu.org/wiki/OpenACC for more information.
.. index:: Varying length strings, strings, varying length, conditional compilation
.. _fortran-95-status:
Fortran 95 status
^^^^^^^^^^^^^^^^^
The Fortran 95 standard specifies in Part 2 (ISO/IEC 1539-2:2000)
varying length character strings. While GNU Fortran currently does not
support such strings directly, there exist two Fortran implementations
for them, which work with GNU Fortran. One can be found at
http://user.astro.wisc.edu/~townsend/static.php?ref=iso-varying-string.
Deferred-length character strings of Fortran 2003 supports part of
the features of ``ISO_VARYING_STRING`` and should be considered as
replacement. (Namely, allocatable or pointers of the type
``character(len=:)``.)
Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
Conditional Compilation, which is not widely used and not directly
supported by the GNU Fortran compiler. You can use the program coco
to preprocess such files (http://www.daniellnagle.com/coco.html).
.. _fortran-2003-status:
Fortran 2003 status
^^^^^^^^^^^^^^^^^^^
GNU Fortran implements the Fortran 2003 (ISO/IEC 1539-1:2004) standard
except for finalization support, which is incomplete.
See the
`Fortran 2003 wiki page `_ for a full list
of new features introduced by Fortran 2003 and their implementation status.
.. _fortran-2008-status:
Fortran 2008 status
^^^^^^^^^^^^^^^^^^^
The GNU Fortran compiler supports almost all features of Fortran 2008;
the `Fortran 2008 wiki `_
has some information about the current implementation status.
In particular, the following are not yet supported:
* ``DO CONCURRENT`` and ``FORALL`` do not recognize a
type-spec in the loop header.
* The change to permit any constant expression in subscripts and
nested implied-do limits in a ``DATA`` statement has not been implemented.
.. _fortran-2018-status:
Fortran 2018 status
^^^^^^^^^^^^^^^^^^^
Fortran 2018 (ISO/IEC 1539:2018) is the most recent version
of the Fortran language standard. GNU Fortran implements some of the
new features of this standard:
* All Fortran 2018 features derived from ISO/IEC TS 29113:2012,
'Further Interoperability of Fortran with C', are supported by GNU Fortran.
This includes assumed-type and assumed-rank objects and
the ``SELECT RANK`` construct as well as the parts relating to
``BIND(C)`` functions.
See also :ref:`further-interoperability-of-fortran-with-c`.
* GNU Fortran supports a subset of features derived from ISO/IEC TS 18508:2015,
'Additional Parallel Features in Fortran':
* The new atomic ADD, CAS, FETCH and ADD/OR/XOR, OR and XOR intrinsics.
* The ``CO_MIN`` and ``CO_MAX`` and ``SUM`` reduction intrinsics,
and the ``CO_BROADCAST`` and ``CO_REDUCE`` intrinsic, except that those
do not support polymorphic types or types with allocatable, pointer or
polymorphic components.
* Events (``EVENT POST``, ``EVENT WAIT``, ``EVENT_QUERY``).
* Failed images (``FAIL IMAGE``, ``IMAGE_STATUS``,
``FAILED_IMAGES``, ``STOPPED_IMAGES``).
* An ``ERROR STOP`` statement is permitted in a ``PURE``
procedure.
* GNU Fortran supports the ``IMPLICIT NONE`` statement with an
``implicit-none-spec-list``.
* The behavior of the ``INQUIRE`` statement with the ``RECL=``
specifier now conforms to Fortran 2018.