Intel® Fortran Compiler - Support for Fortran language standards

Fortran 2003 (and Earlier) Support

As of compiler version 16.0 (Intel® Parallel Studio XE 2016), the Intel® [Visual] Fortran compiler 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 [Visual] Fortran Compiler supports most features that are new to the current revision of the Fortran standard: Fortran 2008 (ISO/IEC 1539-1:2010). Additional Fortran 2008 features will appear in future versions. 

As of compiler version 17.0 (Intel Parallel Studio XE 2017), the significant Fortran 2008 features not yet supported are:

  • Allocatable components of recursive type
  • Subscripts and implied-DO limits in DATA can be any constant expression (previously limited to constants, other implied-DO variables and intrinsic operators)
  • User-defined operators in specification expressions
  • Intrinsic assignment to polymorphic variables
  • Pointer functions on left side of assignment statement
  • Adding ASYNCHRONOUS or VOLATILE attributes inside BLOCK to a variable declared outside the BLOCK
  • Passing a non-pointer data actual argument to a pointer dummy argument
  • Complex arguments to ACOS, ACOSH, ASIN, ASINH, ATAN, ATANH, COSH, SINH and TANH may have COMPLEX arguments (TAN already supported)
  • ATAN(Y,X) as an alternate spelling of ATAN2.
  • Intrinsic function FINDLOC
  • Optional BACK= argument to intrinsic functions MAXLOC and MINLOC
  • Module intrinsic functions COMPILER_OPTIONS and COMPILER_VERSION

In addition, no coarray-related features are supported on MacOS.

Compiler version 17.0 added support for the following Fortran 2008 features not supported by version 16.0:

  • A TYPE specifier may name an intrinsic type
  • Pointer initialization
  • Implied-shape PARAMETER arrays
  • EXIT is allowed in all supported block contexts
  • Internal procedures may be interoperable (have BIND(C))

Fortran 2015 Support

Draft Fortran 2015 features supported include:

  • All features described in ISO/IEC TS29113:2012, Further Interoperability with C (16.0)
    • Assumed type (TYPE(*))
    • Assumed rank (DIMENSION(..))
    • ISO_Fortran_binding.h
    • C descriptors and procedures for manipulating them
    • RANK intrinsic
    • Relaxed restrictions on interoperable dummy arguments
    • Relaxed restrictions on procedures in intrinsic module ISO_C_BINDING

Additional Information

The Intel Fortran compiler also supports a number of extensions to the Fortran standards, as well as command-line options that allow you to override the default actions of the compiler.

In some cases, the default behavior of the Intel Fortran Compiler does not conform to Fortran 2003 semantics.  The following table lists the compiler options which are not enabled by default and which must be specified to obtain full Fortran 2003 semantics. Note that, in some cases, enabling these options may lower run-time performance.

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

Non-Default Compiler Options for Fortran 2003 Semantics
Windows* Linux* and OS X*
/assume:byterecl -assume byterecl
/assume:fpe_summary -assume fpe_summary
/assume:ieee_fp_flags (if /fp:strict or precise also set) -assume ieee_fp_flags (if -fp-model strict or precise also set)
/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

NOTE: Compiler version 17.0 changed the default behavior to be that of /assume:realloc_lhs (-assume realloc_lhs). To disable that behavior in version 17.0 or later, use /assume:norealloc_lhs (-assume norealloc_lhs) or /nostandard-realloc-lhs (-nostandard-realloc-lhs)

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

For more complete information about compiler optimizations, see our Optimization Notice.