Fortran Wiki
Fortran 2008 status

Compiler Support for the Fortran 2008 Standard

The table below documents features from the Fortran 2008 standard that are supported by recent versions of several available compilers. Of course, development versions of some compilers support may additional features. See Compiler Support for Modern Fortran for a summary, caveats, and links to compiler-specific status pages. A similar table is also available for Fortran 2003 status and Fortran 2018 status

The table is based on data from a series of articles in the ACM Fortran Forum by Ian D. Chivers and Jane Sleightholme. For further details of the features listed, see the following report by John Reid: https://wg5-fortran.org/N1851-N1900/N1891.pdf.

Legend:

  • Y = Yes
  • N = No
  • P = Partial
  • ? = Not Known
Fortran 2008 features Absoft Cray GNU (gfortran) HP IBM Intel NAG Oracle PathScale PGI Flang
Compiler Version Number 14 8.4.0 9.x 16.1.5 19.0 6.2 8.8 6.0 18.10 5.0
Submodules N Y Y (201) N Y Y N N N Y
Coarrays N Y Y (301) N N Y N N Y N
Performance enhancements Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
do concurrent N Y Y N Y Y Y N N Y
Contiguous attribute N Y Y N Y Y Y N N Y
Data Declaration Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Maximum rank + corank = 15 N Y Y (701) N Y Y Y N N N
Long integers Y (100) Y Y N Y Y Y Y ? Y
Allocatable components of recursive type N Y Y N Y Y N Y N N
Implied-shape array N Y Y N Y Y Y N N N
Pointer initialization N Y Y N Y Y N N N Y (600)
Data statement restrictions lifted ? Y N ? N Y N N N N
Kind of a forall index N Y N N Y Y Y N N N
Type statement for intrinsic types ? Y Y ? Y Y Y N N N
Declaring type-bound procedures ? Y Y ? Y Y Y N N N
Value attribute is permitted for any nonallocatable nonpointer noncoarray ? Y Y ? P (108) Y ? N ? N
In a pure procedure the intent of an argument need not be specified if it has the value attribute ? Y Y ? Y Y Y N ? N
Accessing data objects Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Simply contiguous arrays rank remapping to rank>1 target N Y Y N Y Y Y N N Y
Omitting an ALLOCATABLE component in a structure constructor ? Y N ? Y Y Y N N N
Multiple allocations with SOURCE= ? Y Y ? Y Y N N ? N
Copying the properties of an object in an ALLOCATE statement ? Y N (201) ? Y Y Y N N Y
MOLD= specifier for ALLOCATE ? Y Y ? Y Y Y Y N Y
Copying bounds of source array in ALLOCATE ? Y N (210) ? Y Y Y Y N Y
Polymorphic assignment N Y Y N Y Y Y Y N N
Accessing real and imaginary parts N Y Y N Y Y Y N N Y
Pointer function reference is a variable N Y P (201) N N Y N N N N
Elemental dummy argument restrictions lifted ? Y Y ? N Y N N ? Y
Input/Output Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Finding a unit when opening a file (newunit=u) N Y Y N Y Y Y N N Y Y
g0 edit descriptor N Y Y N N Y Y N N N
Unlimited format item N Y Y N N Y Y N N N
Recursive I/O N Y Y N N Y Y Y Y Y
Execution control Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
The BLOCK construct N Y Y N Y Y Y N N N
Exit statement N Y Y N Y Y Y N N Y
Stop code N Y Y N Y Y Y N N Y
ERROR STOP ? ? Y ? Y Y ? ? ? N N
Intrinsic procedures for bit processsing Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Bit sequence comparison Y Y Y N N Y Y N N N
Combined shifting Y Y Y N Y Y Y N N N
Counting bits Y Y Y N Y Y Y N P (212) P (214)
Masking bits N Y Y N Y Y Y N N N
Shifting bits Y Y Y N Y Y Y N N N
Merging bits Y Y Y N Y Y Y N N N
Bit transformational functions N Y Y N N Y Y N N N
Intrinsic procedures and modules Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Storage size N Y Y N Y Y Y N N Y Y
Optional argument RADIX added to SELECTED REAL KIND N Y Y N Y Y Y N N N
Extensions to trigonometric hyperbolic intrinsics Y Y Y N Y Y Y N N Y
Bessel functions Y Y Y N N Y Y N N Y
Error and gamma functions Y Y Y N Y Y Y N P Y
Euclidean vector norms N Y Y N N Y Y N N Y
Parity N Y Y N N Y Y Y N N
Execute command line Y Y Y N Y Y Y N N Y N
Optional back argument added to maxloc and minloc N Y Y N Y Y N N N N
Find location in an array ? Y Y N Y Y N N N Y
String comparison ? Y Y ? N Y Y Y N Y
Constants N Y P (203) N Y Y Y N N Y
COMPILER_VERSION N Y Y N Y Y Y N N Y N
COMPILER_OPTIONS N Y Y N Y Y Y N N Y N
Function for C sizeof ? Y Y ? Y Y N N ? Y
Added optional argument for IEEE_SELECTED_REAL_KIND ? Y Y ? Y Y Y N ? Y
Programs and procedures Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Save attribute for module and submodule data ? Y Y ? Y Y Y Y N Y
Empty contains section Y Y Y N Y Y Y N N N
Form of end statement for internal and module procedures ? Y Y ? Y Y Y N N Y
Internal procedure as an actual argument N Y Y N Y Y Y N N Y
Null pointer or unallocated allocatable as absent dummy arg. N Y Y N Y Y Y N N Y
Non-pointer actual for pointer dummy argument ? Y N ? Y Y Y Y ? N
Generic resolution by procedureness N Y N N Y Y Y N N Y
Generic resolution by pointer vs. allocatable N Y Y N Y Y Y N N N
Impure elemental procedures N Y Y N Y Y Y N N Y
Entry statement becomes obsolescent Y Y Y N Y Y Y N N Y
Source form Absoft Cray GNU HP IBM Intel NAG Oracle PathScale PGI Flang
Semicolon at line start Y Y Y ? Y Y Y N Y Y

Legend: Y = Yes, N = No, P = Partial, U = Unconfirmed

Footnotes:

(100) integer(kind=8);

(108) Missing value on dummy with non-constant type parameters.

(201) Implemented in 6.0

(203) int and real, and coarray.

(209) Implemented in 6.0.

(211) NAG has ALLOCATE(MOLD=), but not polymorphic assignment

(212) Pathscale, counting bits, not trailz

(213) Waiting for update from IBM

(214) leadz, popent, and poppar supported. No trailz.

(300) Supported in 6.0

(301) Single image support since 4.6. Multi-image support using OpenCoarrays (including the Fortran 2015 collective subroutines) since 5.1, except allocatable or pointer components of derived type coarrays.

(701) 8.x


Changes

Changes July 2020:

  • PGI, in its version 20.1, now supports execute_command_line

Changes July 2019:

  • Updated table based on latest results from the August 2019 Fortran Forum article (Revision 26).

April 2019:

  • Updated table based on the December 2018 Fortran Forum article (Revision 25).

June 2018:

August 2016:

  • Updated table based on the August 2016 Fortran Forum article (Revision 19).

April 2016:

  • Updated table based on the April 2016 Fortran Forum article (Revision 18).

March 2016:

  • Updated table based on latest results from the December 2015 Fortran Forum article (Revision 17).

November 2015:

  • NAG

    • Updated for v6.0

November 2014:

  • Intel

    • BLOCK Construct
    • EXECUTE_COMMAND_LINE

January 2013:

  • IBM

    • Updated Fortran 2008 support

    • Latest IBM status can always be found here on the Fortran Cafe.

December 2010..April 2011:

  • Extended list of Fortran 2008 features.

  • Absoft: first issue with available data.

  • GFortran

    • Full support: Merging bits, Bit transformational functions.
  • Intel

    • Partial support: Allocatable components of recursive type.

    • Full support: Coarrays, DO CONCURRENT, CONTIGUOUS attribute, Simply contiguous arrays, Maximum rank, Implied-shape array, Pointer initialization, Kind of a forall index, Allocating a polymorphic variable, MOLD= in ALLOCATE, NEWUNIT= in OPEN, G0 and G0.d edit descriptor, Unlimited format item, CONTAINS may be empty, Additional intrinsic procedures, Additional items in ISO_FORTRAN_ENV.

  • PGI: first issue with available data.

August 2010..December 2010:

  • GFortran

    • Partial support: pointer initialization.

    • Full support: CONTIGUOUS attribute, simply CONTIGUOUS arrays, implied-shape arrays, EXIT statement, bit sequence comparison, combined shifting, counting bits, masking bits, shifting bits, Bessel functions Euclidean vector norms, parity, execute command line, NULL pointer as a missing dummy argument, ELEMENTAL procedures that are not PURE, ENTRY statement becomes obsolescent.

April 2010..August 2010:

  • Cray

    • Partial support: error and gamma functions.

    • Full support: coarrays, CONTIGUOUS attribute, simply contiguous arrays, allocating a polymorphic variable, g0 edit descriptor, unlimited format item, BLOCK construct, stop code, bit sequence comparison, masking bits, selecting a real kind, arc tangent function, location of max or min value in an array, find location in an array, constants, and entry statement becomes obsolescent.

    • Errata: “null pointer as a missing dummy argument” changed from Y to N.

  • GFortran

    • Partial support: coarrays, allocating polymorphic variables, and constants.

    • Full support: BLOCK construct, stop code, hyperbolic intrinsic functions, and arc tangent function.

  • HP: first issue with available data.

  • IBM: first issue with available data on Fortran 2008 features.

August 2009..April 2010:

  • GFortran added full support for unlimited format items and the error and gamma functions and partial support for the block construct.

  • Sun added full support for parity.


See Also