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

ID 763692
Updated 7/30/2024
Version 2025.2
Public

 New in the Intel Fortran Compiler (ifx) 2025

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.2  2025.1  2025.0

 Language Elements

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

 Intrinsic procedures and intrinsic modules

     
     split and tokenize    Yes    Yes    Yes
    Trig functions that work in degrees    Yes    Yes    Yes
    Trig functions that work with half revolutions    no    no    no
    selected_logical_kind    Yes    no    no
    Changes to system_clock    Yes    Yes    no
    Changes for conformance with new IEEE standard    Yes    Yes    Yes
    Additional named constants to specify kinds    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
    f_c_string and c_f_strpointer procedures    Yes    Yes    Yes

 Input-Output

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

 Coarrays

     

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

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

 Procedures

     
    Simple procedures    no    no    no

 Array Features

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

 Enumerations

     
    Enumerations types    no    no    no
    Enum types    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)

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

omp_all_memory reserved locator

Yes Yes Yes Yes

adjust_args, append_args for declare variant

Yes Yes Yes Yes

dispatch construct

Yes Yes Yes Yes

thread_limit clause for target

Yes Yes Yes Yes

has_device_addr for target

Yes Yes Yes Yes

nowait clause for taskwait depend

Yes Yes Yes Yes

default(private) and default(firstprivate)

Yes Yes Yes Yes

defaultmap(present)

Yes Yes Yes Yes

align clause for allocate directive

align modifier for allocate clause

Yes Yes Yes Yes

OMP_DISPLAY_ENV

Yes Yes Yes Yes

OMP_SET_NUM_TEAMS

OMP_GET_MAX_TEAMS

OMP_SET_TEAMS_THREAD_LIMIT

Yes Yes Yes Yes

OMP_TARGET_MEMCPY_ASYNC

OMP_TARGET_MEMCPY_RECT_ASYNC

Yes Yes Yes Yes

OMP_GET_MAPPED_PTR OMP_TARGET_ASSOCIATE_PTR

OMP_TARGET_DISASSOCIATE_PTR

Yes Yes Yes Yes

OMP_NUM_TEAMS

OMP_TEAMS_THREAD_LIMIT

Yes Yes Yes Yes
if (parallel: scalar-logical-expression) Yes Yes Yes Yes
REDUCTION clause on TEAMS Yes Yes Yes Yes
ALLOCATE clause Yes Yes Yes Yes
!$omp loop Yes Yes Yes Yes
!$omp teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel loop (combined directive) Yes Yes Yes Yes
!$omp target teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel target teams loop (combined directive) Yes Yes Yes Yes
NONTEMPORAL clause on !$omp simd Yes Yes Yes Yes
IN_REDUCTION clause Yes Yes Yes Yes
USE_DEVICE_ADDR clause Yes Yes Yes Yes
TASK_REDUCTION clause on !$omp taskgroup Yes Yes Yes Yes
!$omp allocate  Yes Yes Yes Yes
!$omp declare variant Yes Yes Yes Yes
MATCH clause on declare variant Yes Yes Yes Yes
if (simd: scalar-logical-expression) Yes Yes Yes Yes
!$omp scan Yes Yes Yes Yes
!$omp requires Yes Yes Yes Yes
!$omp tile Yes Yes Yes Yes
Metadirectives Yes Yes Yes Yes, a subset
“task” reduction-modifier  Yes Yes Yes Yes
"scan" and "default" reduction-modifier Yes Yes Yes Yes
“conditional” lastprivate-modifier Yes Yes no no
ORDER clause (enabled on OMP LOOP) Yes Yes Yes Yes
ORDER clause (enabled on OMP DISTRIBUTE) Yes Yes Yes Yes
UNCONSTRAINED and REPRODUCIBLE order-modifiers in the ORDER clause Yes Yes Yes Yes
"mutexinoutset" and "depobj” dependence-type Yes Yes Yes Yes
“in“, “out“ and “inout“ dependence-type Yes Yes Yes Yes
AFFINITY clause Yes Yes Yes no
DETACH clause no no no no
USES_ALLOCATORS clause no no no no
DECLARE MAPPER and mapper-identifier no no no no
DEVICE_TYPE clause on DECLARE TARGET directive Yes Yes Yes no
!$omp parallel master (combined directive) Yes Yes Yes Yes
!$omp master taskloop (combined directive) Yes Yes Yes Yes
!$omp master taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel master taskloop (combined directive) Yes Yes Yes Yes
!$omp parallel master taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel masked (combined directive) Yes Yes Yes Yes
!$omp masked taskloop (combined directive) Yes Yes Yes Yes
!$omp masked taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel masked taskloop (combined directive) Yes Yes Yes Yes
!$omp parallel masked taskloop simd (combined directive) Yes Yes Yes Yes
DEPEND clause on !$omp taskwait Yes Yes Yes Yes
“acq_rel“, “release“, “acquire“ and “relaxed” memory-order clauses on !$omp atomic Yes Yes Yes Yes
"seq_cst" memory-order clause on !$omp atomic Yes Yes Yes Yes
HINT clause on !$omp atomic Yes Yes Yes Yes
“acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flush Yes Yes Yes Yes
!$omp depobj Yes Yes Yes Yes
Required destory-var modifer for DESTORY clause on depobj Yes Yes Yes Yes
if (cancel: scalar-logical-expression)        
FILTER clause on the MASKED construct Yes Yes Yes Yes
UNROLL construct Yes Yes Yes Yes
SCOPE construct Yes Yes Yes Yes
ASSUMES directive Yes Yes Yes Yes
ERROR directive Yes Yes Yes Yes
NOTHING directive Yes Yes Yes Yes
LINK and INDIRECT for directive DECLARE TARGET Yes Yes Yes Yes
Iterators in the DEPEND clause Yes Yes Yes Yes
Optional END construct directives with strictly structured block construct bodies Yes Yes Yes Yes
STRICT modifier for GRAINSIZE and NUM_TASK clauses on TASKLOOP Yes Yes Yes Yes
         

OpenMP 5.2

(bold indicates new features in this release)

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

OpenMP 6.0

(bold indicates new features in this release)

Feature Status in Compiler Version 2025.2 Status in Compiler Version 2025.1 Status in Compiler Version 2025.0 Status in Compiler Version 2024.0.0
GROUPPRIVATE directive Yes Yes Yes Yes
INTEROP on DISPATCH Yes Yes Yes Yes
PREFER_TYPE in the APPEND_ARGS clause of DECLARE VARIANT Yes Yes Yes Yes

An IF clause allowed on TEAMS construct

Yes Yes Yes No
A DEVICE_TYPE clause on a TARGET construct Yes Yes Yes No
INTERCHANGE construct reorders loops in a loop nest Yes Yes No No
The WORKDISTRIBUTE construct Yes Yes No No
STRIPE loop transformation construct Yes No No No
The NOWAIT clause now has an optional do-not-synchronize logical argument Yes No No No

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