# Fortran 2018 Features

The following Fortran 2018 feature is new in this release:

- ifort now enforces strict F2018 conformance for arguments to the C_LOC function.

The following Fortran 2018 features are also supported:

- Coarray teams have been implemented.

- The derived type TEAM_TYPE has been added to the ISO_FORTRAN_ENV intrinsic module.

- The CHANGE TEAM and END TEAM statements have been implemented.

- The FORM TEAM statement has been implemented.

- The SYNC TEAM statement has been implemented.

- The TEAM_NUMBER intrinsic function has been implemented.

- The GET_TEAM intrinsic function has been implemented.

- The TEAM argument has been added to the intrinsic functions FAILED_IMAGES, IMAGE_STATUS, and STOPPED_IMAGES.

- The optional TEAM argument has been added to the intrinsic functions STOPPED_IMAGES, NUM_IMAGES, and IMAGE_STATUS.

- New forms of the intrinsic function IMAGE_INDEX and NUM_IMAGES allow optional TEAM and TEAM_NUMBER arguments have been implemented.

- A new form of THIS_IMAGE with a TEAM argument has been implemented.

- An optional TEAM or TEAM_NUMBER specifier is now permitted in image selectors.

- Implicit allocation of an unallocated coarray in a variable definition context is now prohibited.

- Nonpolymorphic pointer arguments to the EXTENDS_TYPE_OF and SAME_TYPE_AS intrinsics no longer need to have defined allocation status.

- Deallocation during finalization has been clarified and now occurs using the semantics defined in Fortran 2018.

- Output from the STOP and ERROR_STOP statement may now be conditionally suppressed.

- STOP and ERROR STOP codes can now be non-constant expressions.

- Named constants of type LOCK_TYPE are no longer allowed.

- The DIM argument to the intrinsic functions ALL, ANY, IALL, IANY, IPARITY, MAXLOC, MAXVAL, MINLOC, MINVAL, NORM2, PARITY, PRODUCT, SUM, and THIS_IMAGE may now be a present OPTIONAL dummy argument.

- VALUE dummy arguments to PURE procedures may appear in variable definition contexts.

- The optional ERRMSG argument has been added to the intrinsic procedures GET_COMMAND_ARGUMENT, GET_ENVIRONMENT_VARIABLE, and GET_COMMAND.

- The OUT_OF_RANGE intrinsic function has been implemented.

- The RANDOM_INIT intrinsic subroutine has been implemented.

- Dummy arguments to defined assignment and operator procedures need not have the INTENT(IN) attribute if they have the VALUE attribute.

- A dummy argument of PURE procedure may appear in a variable definition context if it has the VALUE attribute.

- Constant properties of an object can be used in the objects initialization.

- Polymorphic structure constructor components no longer need to have the same dynamic type as their corresponding structure component expression.

- The RANDOM_INIT intrinsic subroutine has been implemented.

- Several new Fortran 2018 terms have been added to the Glossary; for example: current team, ancestor team, parent team, and established coarrays.

- Non-pointer variables with the PROTECTED attribute may no longer appear as a data-target or as a initial-data-target.

- VOLATILE variables are now prohibited in PURE procedures and statement functions.

- The type and kind of an implied DO loop variable can now be specified in an implied-do loop of array constructors and data statements.

- Floating point comparisons perform IEEE compareSignaling<relation> operations when the assume ieee_compares or -standard-semantics compiler option is specified.

- The REDUCE intrinsic that performs user-defined reductions has been implemented.

- Enhancements to the IMPLICIT NONE statement allow specifying that all external procedures must be declared as EXTERNAL.

- Enhancements to the GENERIC statement permit it to be used to declare generic interfaces.

- You can now specify locality for variables in a DO CONCURRENT statement.

- Enhancements to edit descriptor forms E and D, EN, ES, and G allow a field width of zero, analogous to the F edit descriptor.

- The exponent width e in a data edit descriptor can now be zero, analogous to a field width of zero.

- The RN edit descriptor now rounds to nearest as specified by Fortran 2018 and ISO/IEC/IEEE 60559:2011.

- The EX edit descriptor allows for hexadecimal format output of floating-point values, and hexadecimal format floating-point values are allowed on input.

- SIZE= can be specified for non-advancing I/O.

- The values for SIZE= and POS= in an INQUIRE statement for pending asynchronous operations have been standardized.

- The value assigned to the RECL= specifier in an INQUIRE statement now has standardized values.

- A new form of the intrinsic function CMPLX does not require the KIND= keyword if the first argument is type COMPLEX.

- The arguments to the SIGN function can be of different kinds.

- The named constants STAT_FAILED_IMAGE and STAT_UNLOCKED_FAILED_IMAGE have been defined in the intrinsic ISO_FORTRAN_ENV modules.

- The named constant kind type C_PTRDIFF_T has been added to the intrinsic module ISO_C_BINDING.

- The non-block DO statement and the arithmetic IF statement are now deleted in Fortran 2018. Intel® Fortran fully supports features deleted in the Fortran Standard.

- COMMON, EQUIVALENCE and BLOCKDATA statements are now obsolescent.

- The labeled form of a DO loop is now obsolescent.

- Specific names of intrinsic procedures are now obsolescent.

- The following atomic subroutines have been implemented: ATOMIC_ADD, ATOMIC_AND, ATOMIC_CAS, ATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR, ATOMIC_OR, and ATOMIC_XOR.

- The following collective subroutines have been implemented: CO_BROADCAST, CO_MAX, CO_MIN, CO_REDUCE, and CO_SUM.

- The SELECT RANK construct has been implemented allowing manipulation of assumed rank dummy arguments..

- The compiler will now diagnose the use of nonstandard intrinsic procedures and modules as required by Fortran 2018.

- To comply with the latest Fortran 2018 standards, C_F_PROCPOINTER is now IMPURE.

- Transformational intrinsic functions from the intrinsic modules ISO_C_BINDING, IEEE_ARITHMETIC, and IEEE_EXCEPTIONS are now allowed in specification expressions.

- You can now specify optional argument RADIX for the IEEE_GET_ROUNDING_MODE and IEEE_SET_ROUNDING_MODE intrinsic module procedures.

- IEEE_ROUND_TYPE and IEEE_AWAY have been added to the IEEE_ARITHMETIC intrinsic module.

- The optional ROUND argument has been added to the IEEE_RINT function defined in the intrinsic module IEEE_ARITHMETIC.

- The intrinsic module IEEE_ARITHMETIC now includes the functions IEEE_FMA, IEEE_SIGNBIT, IEEE_NEXT_UP, and IEEE_NEXT_DOWN.

- The intrinsic module IEEE_EXCEPTIONS now contains a new derived type, IEEE_MODES_TYPE, which can be used to save and restore the IEEE_MODES using the IEEE_GET_MODES and the IEEE_SET_MODES intrinsic module procedures.

- SUBNORMAL is now synonymous with DENORMAL.

- The following intrinsic module procedures have been implemented:

  - IEEE_MAX_NUM, IEEE_MAX_NUM_MAG, IEEE_MIN_NUM, and IEEE_MIN_NUM_MAG

  - IEEE_QUIET_EQ, IEEE_QUIET_GE, IEEE_QUIET_GT, IEEE_QUIET_LE, IEEE_QUIET_LT, IEEE_QUIET_NE, IEEE_SIGNALING_EQ, IEEE_SIGNALING_GE, IEEE_SIGNALING_GT, IEEE_SIGNALING LE, IEEE_SIGNALING_LT, and IEEE_SIGNALING_NE

  - IEEE_SUPPORT_SUBNORMAL

- An optional STAT= specifier has been added to ATOMIC_REF and ATOMIC_DEFINE intrinsic procedures.

- Optional STAT= and ERRMSG= specifiers have been added to the MOVE_ALLOC intrinsic procedure, to image selectors, and to the CRITICAL statement and construct.

- INTEGER and LOGICAL arguments to intrinsic procedures are no longer required to be of default kind.

- The intrinsic module procedures IEEE_INT and IEEE_REAL have been implemented.

- The FAIL IMAGE statement has been implemented. It allows debugging recovery code for failed images without having to wait for an actual image failure.

- Intrinsic functions FAILED_IMAGES, IMAGE_STATUS, and STOPPED_IMAGES have been implemented.

- The COSHAPE intrinsic function returns the cobounds of a coarray argument.

- You can now add module names, OpenMP reduction identifiers, and defined I/O generic specs to PUBLIC and PRIVATE statements.

- Coarray EVENTs provide synchronization capabilities between images:

  EVENT_QUERY intrinsic subroutine

  EVENT_POST and EVENT_WAIT statements

  The derived type EVENT_TYPE is defined in the ISO_FORTRAN_ENV intrinsic module.

- The IMPORT statement can now be used in internal subprograms and BLOCK constructs to control host association. There are three new forms:

  - IMPORT, ALL

  - IMPORT, NONE

  - IMPORT, ONLY: import-name-list

- A module name that is accessed via used association can appear in a PUBLIC or PRIVATE access-id-list . It can be used to set the default accessibility for all accessible entities from that module.

- C language interoperability :

  - An assumed-rank array is now permitted to be an argument to the C_SIZEOF intrinsic function.

  - With the exception of C_F_POINTER, all standard procedures in the ISO_C_BINDING intrinsic module are now PURE.

  - Assumed type variables

  - Assumed-rank arrays

  - C descriptors

  - RANK intrinsic function

- The NON_RECURSIVE keyword declares a procedure as not recursive. The default in previous Fortran standards was that procedures were non-recursive unless declared RECURSIVE. Fortran 2018 changes that default. Intel® Fortran has implemented the NON_RECURSIVE keyword, but the default compilation mode for this release remains non-recursive.

- The ERROR STOP statement is allowed in PURE procedures

For information about the Fortran standards, visit the Fortran Standards Committee website.

Parent topic: Conformance, Compatibility, and Fortran Features

## See Also

New Language Features
Fortran 2003 Features
Fortran 2008 Features