| Fortran 2008 features | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Compiler Version Number | 4.6 | 14.1 | 12.0 | 5.2 | 4.0 | ||||||
| Submodules | N | Y | ? | N | N | N | N | N | N | N | N |
| Coarrays | N | Y | P | P (200) | N | N | Y | N | N | N | N |
| Performance enhancements | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| do concurrent | N | N | ? | P | N | N | Y | N | N | N | N |
| Contiguous attribute | N | Y | ? | Y | N | Y | Y | N | N | N | N |
| Simply contiguous arrays | N | Y | ? | Y | N | Y | Y | N | N | N | N |
| Data Declaration | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Maximum rank | N | N | ? | N | N | Y | Y | N | N | N | N |
| Long integers | Y (100) | Y | ? | Y | N | Y | Y (100) | Y | Y | Y | Y |
| Allocatable components of recursive type | N | N | ? | N | N | N | P | N | N | N | N |
| Implied-shape array | N | N | ? | Y | N | Y | Y | N | N | N | N |
| Pointer initialization | N | N | ? | Y | N | N | Y | N | N | N | N |
| Data statement restrictions lifted | ? | ? | ? | ? | ? | N | N | N | ? | N | N |
| Kind of a forall index | N | N | ? | N | N | N | Y | N | N | N | N |
| Type statement for intrinsic types | ? | ? | ? | ? | ? | Y | N | N | ? | N | N |
| Declaring type-bound procedures | ? | ? | ? | Y | ? | Y | Y | N | ? | N | N |
| Allocating a polymorphic variable | N | Y | ? | P (202) | N | P (202) | Y | N | N | N | ? |
| Accessing data objects | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Omitting an allocatable component in a structure component | ? | ? | ? | ? | ? | N | Y | ? | ? | N | ? |
| Copying bounds of source array in allocate | ? | ? | ? | ? | ? | Y | Y | ? | ? | N | ? |
| Allocating a polymorphic variable | ? | ? | ? | ? | ? | P (202) | Y | ? | ? | N | ? |
| Accessing real and imaginary parts | N | N | ? | N | N | Y | N | N | N | N | N |
| Pointer functions | N | N | ? | N | N | N | N | N | N | N | N |
| Elemental dummy argument restrictions lifted | ? | ? | ? | ? | ? | N | N | ? | ? | N | ? |
| Input/Output | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Finding a unit when opening a file | N | N | ? | Y | N | Y | Y | N | N | N | N |
| g0 edit descriptor | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Unlimited format item | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Recursive input/output | N | Y | ? | Y | N | N | Y | Y | Y | Y | N |
| Execution control | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| The block construct | N | Y | ? | Y | N | Y | N | N | N | N | N |
| Exit statement | N | N | ? | Y | N | Y | N | N | N | N | N |
| Stop code | N | Y | ? | Y | N | Y | Y | N | N | N | N |
| Intrinsic procedures for bit processsing | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Bit sequence comparison | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Combined shifting | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Counting bits | N | Y | ? | Y | N | Y | Y | N | N | P | Y |
| Masking bits | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Shifting bits | N | Y | ? | Y | N | N | Y | N | N | N | N |
| Merging bits | N | N | ? | Y | N | N | Y | N | N | N | N |
| Bit transformational functions | N | N | ? | Y | N | N | Y | N | N | N | N |
| Intrinsic procedures and modules | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Storage size | N | N | ? | Y | N | N | Y | N | N | N | N |
| Taking radix into account when selecting a real kind | N | Y | ? | N | N | Y | Y | N | N | N | N |
| Extensions to trigonometric and hyperbolic intrinsics | ? | N | ? | Y | N | Y | Y | N | N | N | Y |
| Bessel functions | N | N | ? | Y | N | N | Y | N | N | N | N |
| Arc tangent function | ? | Y | ? | Y | N | Y | Y | N | N | N | ? |
| Error and gamma functions | N | P | ? | Y | N | Y | Y | N | N | P | N |
| Euclidean vector norms | N | N | ? | Y | N | N | Y | N | N | N | N |
| Parity | N | N | ? | Y | N | N | Y | N | Y | N | N |
| Execute command line | N | N | ? | Y | N | Y | N | N | N | N | N |
| Location of max. or min. value in an array | N | Y | ? | N | N | N | N | N | N | N | N |
| Find location in an array | ? | Y | ? | N | N | N | N | N | N | N | N |
| String comparison | ? | ? | ? | ? | ? | N | Y | Y | ? | N | N |
| Constants | N | Y | ? | Y | N | Y | Y | N | N | N | N |
| Module procedures | N | N | ? | Y | N | Y | N | N | N | N | N |
| Programs and procedures | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Save attribute for module and submodule data | ? | ? | ? | ? | ? | Y | Y | Y | ? | N | N |
| Empty contains section | N | Y | ? | Y | N | Y | Y | N | N | N | N |
| Form of end statement for internal and module procedures | ? | ? | ? | ? | ? | Y | N | N | ? | N | N |
| Internal procedure as an actual argument | N | N | ? | Y | N | Y | Y | N | N | N | N |
| Null pointer or unallocated allocatable as absent dummy arg. | N | N | ? | Y | N | P | N | N | N | N | N |
| Pointer dummy arguments | ? | ? | ? | ? | ? | Y | ? | N | ? | N | N |
| Generic resolution by pointer or alloc. attr. | N | N | ? | N | N | N | N | N | N | N | N |
| Null pointer as a missing dummy argument | N | N | ? | Y | N | P | N | N | N | N | ? |
| Elemental procedures that are not pure | N | N | ? | Y | N | N | N | N | N | N | N |
| Entry statement becomes obsolescent | N | Y | ? | Y | N | Y | N | N | N | N | N |
| Source form | Absoft | Cray | g95 | GNU | HP | IBM | Intel | NAG | Oracle | PathScale | PGI |
| Semicolon at line start | ? | ? | ? | ? | ? | Y | N | Y | ? | Y | Y |
Legend: Y = Yes, N = No, P = Partial, U = Unconfirmed
Footnotes: (100) integer(kind=8); (200) Only for a single image; (202) Only MOLD=; (203) int and real, and coarray.
Changes January 2013:
IBM
Updated Fortran 2008 support
Latest IBM status can always be found here on the Fortran Cafe.
Changes between December 2010 and 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.
Changes between August 2010 and 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.
Changes between April 2010 and 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.
Changes between August 2009 and 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.
The information in the above table is from “Compiler Support for the Fortran 2003 and 2008 Standards,” a recurring article in the Fortran Forum by Ian D. Chivers and Jane Sleightholme.