Fortran Wiki
Fortran 2003 status

Compiler Support for the Fortran 2003 Standard

Fortran 2003 features Absoft Cray g95 GNU HP IBM Intel NAG Oracle PathScale PGI
Compiler Version Number 14 8.1.1 4.7/4.8 14.1 14.0.0 5.3.1 12.4 Beta 4 14.9
ISO TR 15580 IEEE Arithmetic Y Y P N Y Y Y Y Y Y Y
ISO TR 15581 Allocatable Enhancements Y Y Y Y Y Y Y Y Y Y Y
Data enhancements and object orientation Absoft Cray g95 GNU HP IBM Intel NAG Oracle PathScale PGI
Parameterized derived types N Y N N N Y Y N N N Y
Procedure pointers Y Y Y Y Y Y Y Y Y N Y
Finalization N Y N N (31) N Y Y Y Y N Y
Procedures bound by name to a type N Y N Y N Y Y Y Y N Y
The PASS attribute Y Y N Y Y Y Y Y Y N Y
Procedures bound to a type as operators N Y N Y N Y Y Y Y N Y
Type extension N Y N Y N Y Y Y Y N Y
Overriding a type-bound procedure N Y N Y N Y Y Y Y N Y
Enumerations Y Y Y Y N Y Y Y Y N Y
ASSOCIATE construct N Y N P N Y Y Y N N Y
Polymorphic entities N Y N Y N Y Y Y Y N Y
SELECT TYPE construct N Y N P N Y Y Y Y N Y
Deferred bindings and abstract types Y Y N Y N Y Y Y Y N Y
Allocatable scalars (12) ? Y ? Y N Y Y Y Y N Y
Allocatable character length (12) ? Y ? P N Y Y Y Y N Y
Miscellaneous enhancements Absoft Cray g95 GNU HP IBM Intel NAG Oracle PathScale PGI
Structure constructor changes Y Y Y Y N Y Y Y Y N Y
Generic procedure interfaces with the same name as a type (32) ? ? ? ? (31) ? Y Y Y Y N Y
The allocate statement P Y P Y N Y Y Y Y N Y
Assignment to an allocatable array N Y (2) N P Y Y Y (2) Y Y N Y (2)
Transferring an allocation N Y N Y N Y Y Y Y N Y
More control of access from a module Y Y N Y N Y Y Y Y N Y
Renaming operators on the USE statement Y Y Y P N Y Y Y Y N Y
Pointer assignment Y Y Y Y N Y Y Y Y N Y
Pointer INTENT Y Y Y Y Y Y Y Y Y Y Y
The VOLATILE attribute Y Y Y Y Y Y Y Y Y Y Y
The IMPORT statement Y Y Y Y Y Y Y Y Y Y Y
Intrinsic modules Y Y Y Y Y Y Y Y Y Y Y
Access to the computing environment Y Y Y Y Y Y Y Y Y Y Y
Support for international character sets P (19) P (19) Y Y N P P (19) Y N N P (19)
Lengths of names and statements Y Y ? Y Y Y Y Y Y Y Y
Binary, octal and hex constants Y Y Y Y Y Y Y Y Y Y Y
Array constructor syntax Y Y Y Y Y Y Y Y Y Y Y
Specification and initialization expressions Y Y Y P Y Y P Y Y N Y
Complex constants Y Y Y Y Y Y Y Y Y Y Y
Changes to intrinsic functions Y Y Y P (9) Y Y Y Y Y ? Y
Controlling IEEE underflow Y Y N N Y Y Y Y Y Y Y
Another IEEE class value Y Y N N Y Y Y Y Y Y Y
Input/output enhancements Absoft Cray g95 GNU HP IBM Intel NAG Oracle PathScale PGI
Derived type input/output N Y N N N Y Y N N N Y
Asynchronous input/output Y Y Y Y (10) N Y Y Y Y N Y
FLUSH statement Y Y Y Y N Y Y Y Y Y Y
IOMSG= specifier Y Y Y Y Y Y Y Y Y N Y
Stream access input/output N Y Y Y N Y Y Y Y N Y
ROUND= specifier Y Y P P (30) Y Y Y (20) Y Y N Y
DECIMAL= specifier Y Y Y Y Y Y Y (22) Y Y N Y
SIGN= specifier Y Y Y Y Y Y Y (21) Y Y N Y
Kind type parameters of integer specifiers N Y ? N N Y Y Y Y N Y
Recursive input/output N Y Y Y N Y Y Y Y Y Y
Intrinsic function for newline character N Y Y Y Y Y Y Y Y Y Y
Input and output of IEEE exceptional values Y Y Y Y Y Y Y Y Y Y Y
Comma after a P edit descriptor Y Y Y Y Y Y Y Y Y Y Y
Interoperability with C Absoft Cray g95 GNU HP IBM Intel NAG Oracle PathScale PGI
Interoperability of intrinsic types Y Y Y Y Y Y Y Y Y Y Y
Interoperability with C pointers Y Y Y Y Y Y Y Y Y Y Y
Interoperability of derived types Y Y Y Y Y Y Y Y Y Y Y
Interoperability of variables Y Y Y Y Y Y Y Y Y Y Y
Interoperability of procedures Y Y Y Y Y Y Y Y Y Y Y
Interoperability of global data Y Y Y Y Y Y Y Y Y N Y

Legend: Y = Yes, N = No, P = Partial, ? = Not Known

Footnotes:

(2) Optional under flag;

(9) kind= of maxloc, minloc, shape missing;

(10) implemented as synchronous I/O;

(18) move_alloc;

(19) selected_char_kind only;

(20) plus RC, RD, RN, RP, RU, RZ;

(21) plus BLANK=, DELIM=, PAD=, SIZE=;

(22) plus DC,DP;

(30) only for output.

(31) Partial in the 4.9 development version.

(32) These user-defined functions are not to be confused with a type’s structure constructor, which is generated automatically. Structure constructors have also changed in Fortran 2003, e.g. by treating components with default initialization as optional arguments.


Changes

Changes November 2014:

  • Intel added parameterized derived types

Changes between December 2010 and April 2011:

  • Cray supports ISO TR 15580 IEEE arithmetic, renaming operators on the USE statement, controlling IEEE underflow, another IEEE class value, and the ROUND= specifier.

  • GNU supports allocatable character length and partially supports assignment to an allocatable array.

  • HP supports ISO TR 15580 IEEE arithmetic and lengths of names

    and statements.

  • IBM supports more control of access from a module, renaming operators on the USE statement, and lengths of names and statements.

  • Intel added finalization, pointer assignment and other items.

  • Added new columns for Absoft and PGI compilers.

No changes between August 2010 and December 2010.

Changes between April 2010 and August 2010:

  • Cray added partial support for international character sets.
  • GFortran added partial support for the ASSOCIATE construct.
  • IBM added support for parameterized derived types.
  • Intel added partial support for procedures bound to a type as operators and full support for SELECT TYPE.

Changes between December 2009 and April 2010:

  • GFortran implemented recursive input/output.

Source

“Compiler Support for the Fortran 2003 and 2008 Standards” is a series of articles in the ACM Fortran Forum by Ian D. Chivers and Jane Sleightholme. Links to previous revisions are given below:


See Also


Maintenance Notes

Colors

  • Yes: #bbddbb
  • No: #ffaaaa
  • Partial: #ffffdd
  • Unknown: #eeeeee

After modifying the contents of cells in the table, the following Emacs lisp function can be used to synchronize the cell colors with the cell contents:

(defun fortranwiki-update-status-table ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (replace-regexp "#[0-9a-f]+\">Y" "#bbddbb\">Y")
    (beginning-of-buffer)
    (replace-regexp "#[0-9a-f]+\">N" "#ffaaaa\">N")
    (beginning-of-buffer)
    (replace-regexp "#[0-9a-f]+\">P" "#ffffdd\">P")
    (beginning-of-buffer)
    (replace-regexp "#[0-9a-f]+\">\\?" "#eeeeee\">?")))