Chart of Fortran 2008 Features supported by GNU Fortran
See also Fortran 2018 implementation status
See also Fortran 2003 implementation status
See also TS 29113: Technical Specification on Further Interoperability with C
When the question which Fortran 2003 features are implemented in which compiler, came up in comp.lang.fortran, the idea was born to create a chart of the features supported by the different compilers. The result was a list in Fortran Forum (see Fortran2003Status). With Fortran 2008 on the horizon, the list is being updated for Fortran 2008.
The listed items follow the sections in the following writeup:
The new features of Fortran 2008 by John Reid (2014 version)
cf. also Coarrays in the next Fortran Standard by John Reid
The Fortran Forum articles:
Update: ACM SIGPLAN Fortran Forum '''26''', 2 (2007) (part of the Frontmatter; contains the status of more compilers)
- Updates appearing in all issues of ACM SIGPLAN Fortran Forum since then
Latest issue: December, 2018 ACM SIGPLAN Fortran Forum '''37''' (3), 8 (2018), 25th revision
A freely available version of the article can be found at:
http://www.fortranplus.co.uk/resources/fortran_2003_2008_compiler_support.pdf (Fortran Forum PDF, always delayed by a few months)
Implemented 2008 features in the GNU Fortran compiler
Submodules |
Yes (since 6.0, 2015-08-05) |
Coarrays |
Yes |
allocatable or pointer components |
Yes (since 7.3) PR78983 |
Performance enhancements |
|
do concurrent |
Partial (since 4.7, 2011-09-08) (type-spec support (and concurrency) missing; PR78219) |
Contiguous attribute |
Yes (since 4.6, 2010-06-21), the is_contiguous intrinsic has been implemented on 2019-01-07 |
Simply contiguous arrays |
Yes (rather a new concept/definition than a new feature thus 'yes'). |
Data declaration |
|
Maximum rank + corank <= 15 |
Yes (since 8.0, 2018-01-25) |
Long integers (18 digits or 64 bits) |
Yes |
Allocatable components of recursive type |
Yes (since 7.0, 2016-10-25) |
Implied-shape array |
Yes (since 4.6, 2010-08-13) |
Pointer initialization |
Yes (since 4.6, 2011-02-08) |
Data statement restrictions lifted |
Yes |
Kind of a forall index |
No, PR78219 |
Type statement for intrinsic types TYPE |
Yes |
Declaring type-bound procedures |
Yes |
Value attribute is permitted for any nonallocatable |
Partial – arrays not supported PR102369 |
In pure procedure intent of an argument with |
Yes |
Allocating a polymorphic variable |
Yes (partial since 4.6, full since 7.0) |
Data usage |
|
Omitting an allocatable component in a structure constructor |
??? |
Multiple allocations with source |
??? |
Copying the properties of an object in an allocate statement |
??? |
Polymorphic assignment |
??? |
Accessing real and imaginary parts |
Yes (since 9.0, 2018-11-01) |
Pointer function reference is a variable |
Yes (partial since 4.6, full since 6.0) |
Elemental dummy arguments restrictions lifted |
Yes PR49802 |
Input/Output |
|
Finding a unit when opening a file |
Yes (since 4.5, 2009-06-08) |
g0 edit descriptor |
Yes (since 4.4) |
Unlimited format item |
Yes (since 4.5, 2009-08-17) |
Recursive input/output |
Yes |
Execution control |
|
The block construct |
Yes (since 4.5, 2009-09-29), but as experimental with some details missing |
Exit statement |
Yes (since 4.6, 2010-09-03) |
Stop code |
Yes (since 4.6, 2010-06) |
ERROR STOP |
Yes |
Intrinsic procedures for bit processsing |
|
Bit sequence comparison |
Yes (since 4.6, 2010-09-08) |
Combined shifting |
Yes (since 4.6, 2010-09-08) |
Counting bits |
Yes (since 4.6, 2010-08-31; leadz/tailz since GCC 4.4) |
Masking bits |
Yes (since 4.6, 2010-09-08) |
Shifting bits |
Yes (since 4.6, 2010-09-08) |
Merging bits |
Yes (since 4.6, 2010-09-08) |
Bit transformational functions |
Yes (since 4.6, 2010-09-06) |
Intrinsic procedures and modules |
|
Storage size |
Yes (since 4.6, 2010-07-08) |
Optional argument radix added to selected real kind |
Yes |
Extensions to trigonometric and hyperbolic intrinsic functions |
Yes |
Selecting a real kind |
Yes (since 4.6, 2010-06-25) |
Hyperbolic intrinsic functions |
Yes (since 4.5) |
Bessel functions |
Yes (since 4.6, 2010-08-21, the elemental functions since GCC 4.4) |
Error and gamma functions |
Yes (since 4.5, 2009-05-16 including ERFC_SCALED in initialization expressions) |
Euclidean vector norm |
Yes (since 4.6, 2010-08-27) |
Parity |
Yes (since 4.6, 2010-08-27) |
Execute command line |
Yes (since 4.6, 2010-09-01) |
BACK argument to MINLOC and MAXLOC |
Yes (since 9.0, 2018-05-08) |
Find location in an array |
Yes (since 9.0, 2018-10-28) |
String comparison |
Yes |
Constants |
Yes (since 4.7, 2011-06-16) |
COMPILER_VERSION |
Yes |
COMPILER_OPTIONS |
Yes |
Function for C sizeof |
Yes |
Added optional argument for ieee_selected_real_kind |
Yes |
Programs and procedures |
|
Save attribute for module and submodule data |
Yes |
Empty contains section |
Yes |
Form of the end statement for an internal or |
Yes |
Internal procedure as an actual argument |
Yes (since 4.6, 2010-09-03) |
Generic resolution by pointer or allocatable attribute |
Yes (partial since 4.8, full since 9.0) |
Null pointer or unallocated allocatable as |
Yes (since 4.6, 2010-08-15) |
Elemental procedures that are not pure |
Yes (since 4.6, 2010-08-15) |
Entry statement becomes obsolescent |
Yes (since 4.6, 2010-06-25) |
Source form |
|
Semicolon at line start |
Yes |
Unimplemented features -- based on the list in the "Introduction" of the F2008 standard
There is a large overlap with the No items in the table above.
- The DO CONCURRENT construct provides a means for the program to specify that individual loop iterations have no interdependencies.
- Subscripts and nested implied-do limits inside a data-implied-do can be any constant expression instead of being limited to combinations of constants, implied-do variables, and intrinsic operations.
- A FORALL index variable can have its type and kind explicitly declared within the construct.
- A structure constructor can omit the value for an allocatable component.
- A pointer function reference can denote a variable in any variable definition context.
- Some restrictions on the use of dummy arguments in elemental subprograms have been removed.
- ALLOCATABLE and POINTER attributes are used in generic resolution.
- Procedureness of a dummy argument is used in generic resolution.