Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler

ID 763692
Updated 7/30/2024
Version 2025.2
Public

author-image

By

 New in the Intel Fortran Compiler (ifx) 2025

New Fortran 2023 features in this release:

  • The half revolution trigonometric functions ACOSPI, ASINPI, ATANPI, ATAN2PI, COSPI, SINPI, and TANPI.
  • The RANK clause can appear in a type declaration statement, giving the dimension attribute to pointer, allocatable, and assumed shape objects.
  • The IEEE_GET_ROUNDING_MODE, IEEE_GET_UNDERFLOW_MODE, IEEE_SET_ROUNDING_MODE, and IEEE_SET_UNDERFLOW_MODE subroutines in the IEEE_ARITHMETIC intrinsic module are now PURE.
  • The IEEE_GET_MODES, IEEE_GET_STATUS, IEEE_SET_MODES, and IEEE_SET_STATUS from the IEEE_EXCEPTIONS intrinsic module are now PURE.

New Features in this release:

  • The COTANPI intrinsic function returns the cotangent of its argument, which is expressed in half revolutions.
  • The FOR_GET_FPE and FOR_SET_FPE functions in the module IFCORE are now PURE.

New OpenMP features in this release:

OpenMP 6.0

  • The OpenMP NOWAIT clause now accepts an optional logical conditional expression argument that determines if the NOWAIT clause is to be honored or ignored.
  • The NEED_DEVICE_ADDR adjust-op modifier may appear in an ADJUST_ARGS clause of a DECLARE VARIANT
  • The OpenMP 6.0 syntax for the PREFER_TYPE modifier on an INTEROP directive is now supported.

 

New Fortran 2023 features in this release:

  • A data component whose type has a coarray potential subobject component may be an array.
  • Intrinsic function SELECTED_LOGICAL_KIND has been implemented.

New Features in this release:

  • The IEEE_SCALB (X, I) now permits the I argument to be of type real with the same kind type parameter as the X argument (Fortran 2018 interpretation)
  • Option assume inline_cloc causes the compiler to generate inline code for the C_LOC function from the intrinsic module procedure ISO_C_BINDING.  The default is assume noinline_cloc, which treats C_LOC as a call to an external function.

New OpenMP features in this release:

OpenMP 6.0

  • The STRIPE loop transformation construct has been implemented.
  • The NOWAIT clause now has an optional do-not-synchronize logical argument.

Changes in this release:

     New in ifx 2025.1.1 Patch release

    New Features in ifx 2025.1 

           New Fortran 2023 features

    • Changes to the SYSTEM_CLOCK intrinsic have been implemented. All integer arguments must have the same kind type, and be of at least default integer kind. Violation of these restrictions is diagnosed as standard messages when option -stand f2023 (Windows: /stand:f23)or option standard-semantics appears on the command line.
    • PUBLIC NAMELIST groups may now contain PRIVATE variables.

    New OpenMP features in ifx 2025.1

    • OpenMP 6.0
      • The WORKDISTRIBUTE construct divides the associated block of statements into units of work that are each executed once by a thread of the enclosing TEAMS construct. A procedure reference in the associated block, with the exception of a reference to MATMUL with fixed-size array arguments, will inhibit the work-sharing properties of this construct at this time.
      • INTERCHANGE construct reorders loops in a loop nest.
    • See Intel® Compiler Extension Routines to OpenMP* in the Fortran Developer Guide and Reference for more information.

    New Features in ifx 2025.0  

    • The [no]ieee_mode_restore keyword has been added to the assume option.  This enables saving and restoring the IEEE mode flags at call sights as required by the Fortran standard.  The default is assume noieee_mode_restore, which does not save the mode flags prior to a call and does not restore them after the call.
    • The standard-semantics option is now sensitive to a standards conformance level set by the stand option.  If no stand option is specified, standard semantics sets options to conform to Fortran 2018 standard behavior.
    • The fopenmp-offload-mandatory and  /Qopenmp-offload-mandatory compiler option tells the compiler to generate only a device version of the compiled code and not a host version.
    • Option -inline-forceinline (Linux) and /Qinline-forceinline (Windows), which tells the compiler to treat inline routines as forceinline.
    • Option -fvec-allow-scalar-stores (Linux) and /Qvec-allow-scalar-stores (Windows), which ensures vectorization of an explicit simd loop.
    • You can specify new pure intrinsic subroutines SPLIT and TOKENIZE.

    New OpenMP features in ifx 2025.0

    • OpenMP 6.0
      • An IF clause allowed on TEAMS construct
    • OpenMP 6.0
      • A DEVICE_TYPE clause may now appear on a TARGET construct.
    • OpenMP 5.1
      • The DEVICE_TYPE clause may appear on a DECLARE TARGET directive.
    • OpenMP 5.1
      • AFFINITY clause is now permitted on a TASK directive.

     Changes

    • -check all now behaves as -check all -check nouninit.  Setting -check uninit and linking with libraries not built with this option such as MKL or MPI causes runtime failures, so -check uninit is no longer set by -check all.
    • The results of IEEE_MAX_NUM, IEEE_MIN_NUM, IEEE_MAX__NUM_MAG, and IEEE_MIN_NUM_MAG have changed to conform to the Fortran 2023 specification.  If one of the arguments is a NaN, the other argument is returned, while in Fortran 2018 a NaN was returned.  The old behavior is available in the new Fortran 2023 functions IEEE_MAX, IEEE_MIN, IEEE_MAX_MAG, and IEEE_MIN_MAG.  These functions are all defined in the intrinsic module IEEE_ARITHMETIC.
    • Previously, a BOZ constant was permitted in an array constructor as an extension, and the BOZ would always be interpreted as an integer value of default kind regardless of the type of the array constructor. To comply with Fortran 2023, in this release, BOZ constants in array constructors with an explicit REAL type-spec are now interpreted as the bits of a REAL value with the same kind as the type-spec. To obtain the old behavior, wrap the BOZ constant in reference to the INT intrinsic function.
    • A C string (Intel Fortran extension) containing a NULL character when assigned to an integer variable used to truncate the string at the null character and pad with NULLs.  As of this release, the truncation no longer occurs. 

     

     

    Features in the Intel Fortran Compiler 2025

    Fortran Standards

    Beginning with ifx version 2023.0.0 these Fortran standards are completely implemented:

    • Fortran 95
    • Fortran 2003
    • Fortran 2008
    • Fortran 2018

    Fortran 2023

    Feature 2025.3 2025.2 2025.1 2025.0

     Language Elements

        
        Allow much longer statement lines and overall statement length  Yes   Yes   Yes   Yes
        Automatic allocation of lengths of character variables  no   no   no   no
        The specifiers typeof and classof  no   no   no   no
        Conditional expressions  Yes   no   no   no
        Conditional expressions as arguments  no   
        More use of binary, octal, and hexadecimal constants    Yes   Yes   Yes

     Intrinsic procedures and intrinsic modules

        
         split and tokenize  Yes   Yes   Yes   Yes
        Trig functions that work in degrees  Yes   Yes   Yes   Yes
        Trig functions that work with half revolutions  Yes   no   no   no
        selected_logical_kind  Yes   Yes   no   no
        Changes to system_clock  Yes   Yes   Yes   no
        Changes for conformance with new IEEE standard  Yes   Yes   Yes   Yes
        Additional named constants to specify kinds  Yes   Yes   Yes   Yes

     Interoperability with C

        
        Extend the intrinsic procedure c_f_pointer to allow its pointer
        result to have specified lower bounds
      Yes   Yes   Yes   Yes
        f_c_string and c_f_strpointer procedures  Yes   Yes   Yes   Yes

     Input-Output

        
        The at edit descriptor  Yes   Yes   Yes   Yes
        Control over leading zeros in output of real values  no   no   no   no
        private use associated variables may appear in a public namelist  group  Yes   Yes   Yes   Yes

     Coarrays

        

        Allow an object of a type with a coarray ultimate component
        to be an array or allocatable 

      Yes   Yes  partial  partial
        Put with notify  no   no   no   no
        Error conditions in collectives  Yes   Yes   Yes   Yes

     Procedures

        
        Simple procedures  no   no   no   no

     Array Features

        
        Using integer arrays to specify subscripts and section subscripts  no    no    no    no
        Using integer arrays to specify the rank and bounds of an array  no    no    no    no
        rank clause  Yes    no    no    no
        Reduction specifier for do concurrent  Yes   Yes   Yes   Yes

     Enumerations

        
        Enumerations types  no   no   no   no
        Enum types  no   no   no   no

     

    OpenMP 4.5

    All features are implemented beginning with Intel Fortran Compiler 2023.0  

    OpenMP 5.0/5.1

    (bold indicates new features in this release)

    FeatureStatus in Compiler Version 2025.2Status in Compiler Version 2025.1Status in Compiler Version 2025.0Status in Compiler Version
    2024.2.0

    omp_all_memory reserved locator

    YesYesYesYes

    adjust_args, append_args for declare variant

    YesYesYesYes

    dispatch construct

    YesYesYesYes

    thread_limit clause for target

    YesYesYesYes

    has_device_addr for target

    YesYesYesYes

    nowait clause for taskwait depend

    YesYesYesYes

    default(private) and default(firstprivate)

    YesYesYesYes

    defaultmap(present)

    YesYesYesYes

    align clause for allocate directive

    align modifier for allocate clause

    YesYesYesYes

    OMP_DISPLAY_ENV

    YesYesYesYes

    OMP_SET_NUM_TEAMS

    OMP_GET_MAX_TEAMS

    OMP_SET_TEAMS_THREAD_LIMIT

    YesYesYesYes

    OMP_TARGET_MEMCPY_ASYNC

    OMP_TARGET_MEMCPY_RECT_ASYNC

    YesYesYesYes

    OMP_GET_MAPPED_PTR OMP_TARGET_ASSOCIATE_PTR

    OMP_TARGET_DISASSOCIATE_PTR

    YesYesYesYes

    OMP_NUM_TEAMS

    OMP_TEAMS_THREAD_LIMIT

    YesYesYesYes
    if (parallel: scalar-logical-expression)YesYesYesYes
    REDUCTION clause on TEAMSYesYesYesYes
    ALLOCATE clauseYesYesYesYes
    !$omp loopYesYesYesYes
    !$omp teams loop (combined directive)YesYesYesYes
    !$omp parallel loop (combined directive)YesYesYesYes
    !$omp target teams loop (combined directive)YesYesYesYes
    !$omp parallel target teams loop (combined directive)YesYesYesYes
    NONTEMPORAL clause on !$omp simdYesYesYesYes
    IN_REDUCTION clauseYesYesYesYes
    USE_DEVICE_ADDR clauseYesYesYesYes
    TASK_REDUCTION clause on !$omp taskgroupYesYesYesYes
    !$omp allocate YesYesYesYes
    !$omp declare variantYesYesYesYes
    MATCH clause on declare variantYesYesYesYes
    if (simd: scalar-logical-expression)YesYesYesYes
    !$omp scanYesYesYesYes
    !$omp requiresYesYesYesYes
    !$omp tileYesYesYesYes
    MetadirectivesYesYesYesYes, a subset
    “task” reduction-modifier YesYesYesYes
    "scan" and "default" reduction-modifierYesYesYesYes
    “conditional” lastprivate-modifierYesYesnono
    ORDER clause (enabled on OMP LOOP)YesYesYesYes
    ORDER clause (enabled on OMP DISTRIBUTE)YesYesYesYes
    UNCONSTRAINED and REPRODUCIBLE order-modifiers in the ORDER clauseYesYesYesYes
    "mutexinoutset" and "depobj” dependence-typeYesYesYesYes
    “in“, “out“ and “inout“ dependence-typeYesYesYesYes
    AFFINITY clauseYesYesYesno
    DETACH clausenononono
    USES_ALLOCATORS clausenononono
    DECLARE MAPPER and mapper-identifierYesnonono
    DEVICE_TYPE clause on DECLARE TARGET directiveYesYesYesno
    !$omp parallel master (combined directive)YesYesYesYes
    !$omp master taskloop (combined directive)YesYesYesYes
    !$omp master taskloop simd (combined directive)YesYesYesYes
    !$omp parallel master taskloop (combined directive)YesYesYesYes
    !$omp parallel master taskloop simd (combined directive)YesYesYesYes
    !$omp parallel masked (combined directive)YesYesYesYes
    !$omp masked taskloop (combined directive)YesYesYesYes
    !$omp masked taskloop simd (combined directive)YesYesYesYes
    !$omp parallel masked taskloop (combined directive)YesYesYesYes
    !$omp parallel masked taskloop simd (combined directive)YesYesYesYes
    DEPEND clause on !$omp taskwaitYesYesYesYes
    “acq_rel“, “release“, “acquire“ and “relaxed” memory-order clauses on !$omp atomicYesYesYesYes
    "seq_cst" memory-order clause on !$omp atomicYesYesYesYes
    HINT clause on !$omp atomicYesYesYesYes
    “acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flushYesYesYesYes
    !$omp depobjYesYesYesYes
    Required destory-var modifer for DESTORY clause on depobjYesYesYesYes
    if (cancel: scalar-logical-expression)    
    FILTER clause on the MASKED constructYesYesYesYes
    UNROLL constructYesYesYesYes
    SCOPE constructYesYesYesYes
    ASSUMES directiveYesYesYesYes
    ERROR directiveYesYesYesYes
    NOTHING directiveYesYesYesYes
    LINK and INDIRECT for directive DECLARE TARGETYesYesYesYes
    Iterators in the DEPEND clauseYesYesYesYes
    Optional END construct directives with strictly structured block construct bodiesYesYesYesYes
    STRICT modifier for GRAINSIZE and NUM_TASK clauses on TASKLOOPYesYesYesYes
         

    OpenMP 5.2

    (bold indicates new features in this release)

    Feature Satus in Compiler Version 2025.2Status in Compiler Version 2025.1Status in Compiler Version 2025.0Status in Compiler Version 2024.2.0
    Any clause allowed on an OpenMP END directive can be specified on the corresponding construct directiveYesYesYesYes
    LINEAR clause changes, including the STEP modifierYesYesYesYes
    ENTER clause as a synonym for the TO clause on DECLARE TARGETYesYesYesYes
    Metadirectives, ASSUME, NOTHING, ERROR, and loop transformation constructs are allowed in PURE proceduresYesYesYesYes
    ALLOCATORS constructYesYesYesYes
    Optional END DISPATCH directiveYesYesYesYes
    Support ALLOCATE and FIRSTPRIVATE on the SCOPE directiveYesYesYesYes
    The DOACROSS clause is a synonym for the DEPEND clauseYesYesYesYes
    Allow dummy arguments as linear-step in a LINEAR clause of a DECLARE SIMDnononoNo
    Optional maptype on TARGET ENTER|EXIT DATA directivesYesYesYesYes
    PRESENT map-type-modifer on MAP clause of DECLARE MAPPER directive.YesYesYesYes
    UNCONSTRAINED and REPRODUCIBLE order-modifers in the ORDER clauseYesYesYesYes

    OpenMP 6.0

    (bold indicates new features in this release)

    FeatureStatus in Compiler Version 2025.3Status in Compiler Version 2025.2Status in Compiler Version 2025.1Status in Compiler Version 2025.0Status in Compiler Version 2024.0.0
    GROUPPRIVATE directiveYesYesYesYesYes
    INTEROP on DISPATCHYesYesYesYesYes
    PREFER_TYPE in the APPEND_ARGS clause of DECLARE VARIANTYesYesYesYesYes

    An IF clause allowed on TEAMS construct

    YesYesYesYesNo
    A DEVICE_TYPE clause on a TARGET constructYesYesYesYesNo
    INTERCHANGE construct reorders loops in a loop nestYesYesYesNoNo
    The WORKDISTRIBUTE constructYesYesYesNoNo
    STRIPE loop transformation constructYesYesNoNoNo
    The NOWAIT clause now has an optional do-not-synchronize logical argumentYesYesNoNoNo
    The NOWAIT clause now accepts an optional logical conditional expression argument that determines if the NOWAIT clause is to be honored or ignored.YesNoNoNoNo

    The NEED_DEVICE_ADDR adjust-op modifier may appear in an ADJUST_ARGS clause of a DECLARE VARIANT

    YesNoNoNoNo
    OpenMP 6.0 syntax for the PREFER_TYPE modifier on an INTEROP directiveYesNoNoNoNo

    Other useful information:

    • ifx and ifort are binary (.o/.obj) and module file (.mod) compatible unless built with compiler option -ipo. Binaries and libraries generated with ifort can be linked with binaries and libraries built with ifx. .mod files generated with one compiler can be used by the other. This is available for 64-bit targets only.
    • Both compilers use the same runtime libraries.
    • ifx may or may not match the performance of ifort compiled applications. Performance improvements in ifx come with each update.

    Similar information for Intel® oneAPI DPC++/C++ Compiler (DPCPP and ICX) regarding the OpenMP implementation.

    References

    Fortran Standards

    For more information about the Fortran Standards visit wg5-fortran.org.

    OpenMP* Specification

    The OpenMP* specifications are available at openmp.org.

    Intel Documentation

    Intel Fortran Compiler for oneAPI Developer Guide and Reference

     

    1