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:
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 July 2020:
Changes July 2019:
April 2019:
June 2018:
August 2016:
April 2016:
March 2016:
November 2015:
NAG
November 2014:
Intel
BLOCK
ConstructEXECUTE_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.
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:
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.
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.