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:
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 technical committee website at http://j3-fortran.org/.