Intel® Fortran Compiler Classic - Support for Fortran language standards

ID 659459
Updated 12/6/2021
Version Latest
Public

author-image

By

For the list of Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler please click here

Fortran 2003 (and Earlier) Support

As of compiler version 16.0 (Intel® Parallel Studio XE 2016), the Intel® Fortran Compiler Classic is fully compliant with the ISO/IEC 1539-1:2004 Fortran language standard (Fortran 2003 Language). Intel Fortran also fully supports programs that conform to the earlier standards Fortran 95, Fortran 90, FORTRAN 77 and FORTRAN IV (FORTRAN 66.) In some cases, compiler options may need to be specified to enable support of behavior that was different in earlier versions of the Fortran standard. 

Fortran 2008 Support

The Intel Fortran Compiler Classic supports all features from the Fortran 2008 standard. 

Fortran 2018 Support

 The Intel Fortran Compiler Classic now supports all features from the Fortran 2018 standard. 

Additional Information

For additional information please refer to  Intel® Fortran Compiler Classic 2021.1 and Intel® Fortran Compiler Developer Guide and Reference 

Fortran 2018 Features

The following Fortran 2018 features are new:

  • 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 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.

The following Fortran 2018 features are also supported:

  • 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_ADDATOMIC_ANDATOMIC_CASATOMIC_FETCH_ADDATOMIC_FETCH_ANDATOMIC_FETCH_ORATOMIC_FETCH_XORATOMIC_OR, and ATOMIC_XOR.

  • The following collective subroutines have been implemented: CO_BROADCASTCO_MAXCO_MINCO_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_FMAIEEE_SIGNBITIEEE_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_IMAGESIMAGE_STATUS, and STOPPED_IMAGES have been implemented, but they do not have full functionality in this release.

    The argument "team" is not yet implemented for these intrinsics. This functionality will be added in a future release.

  • 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.

  • Features to provide synchronization capabilities between images:

    The EVENT_QUERY intrinsic subroutine

    The EVENT_POST and EVENT_WAIT statements

    The derived type EVENT_TYPE in the ISO_FORTRAN_ENV intrinsic module

  • Enhancements to the IMPORT statement

    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

  • Default accessibility of module entities

    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.

  • Enhancement to the NON_RECURSIVE keyword

    This keyword allows procedures to be declared 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. This will change in a future release.

  • I/O enhancement

    The G0.d edit descriptor can be used to specify the output of integer, logical, and character data, using the rules for I0, L1, and A edit descriptors, respectively.

  • Further Interoperability of Fortran with C, including assumed-type, assumed-rank, C descriptors, and the RANK intrinsic.

  • The ERROR STOP statement is allowed in PURE procedures

The single option /standard-semantics (Windows*) or -standard-semantics (Linux* and macOS*) can be used to set all options required to obtain full Fortran 2018 semantics. If using the IEEE_ARITHMETIC, IEEE_EXCEPTIONS or IEEE_FEATURES intrinsic modules, /fp:strict (Windows) or -fp-model strict (Linux and macOS) must also be specified.

Non-Default Compiler Options for Fortran Semantics
Windows* Linux* and macOS*
/assume:byterecl -assume byterecl
/assume:fpe_summary -assume fpe_summary
/assume:failed_images   -assume failed_images
/assume:std_value -assume std_value
/assume:ieee_compares -assume ieee_compares
/assume:std_intent_in -assume std_intent_in
/assume:noold_inquire_recl -assume noold_inquire_recl
/assume:minus0 -assume minus0
/assume:noold_ldout_format -assume noold_ldout_format
/assume:noold_maxminloc -assume noold_maxminloc
/assume:noold_unit_star -assume noold_unit_star
/assume:noold_xor -assume noold_xor
/assume:protect_parens -assume protect_parens
/assume:std_mod_proc_name -assume std_mod_proc_name
/fpscomp:logicals -fpscomp logicals

 

For more information, please refer to the "Compiler Options" section of the Intel Fortran Compiler documentation.