Intel® Fortran Compiler - Support for Fortran language standards

The Intel® [Visual] Fortran Compiler 16.0 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.

The Intel [Visual] Fortran Compiler 16.0 supports many 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. Version 16 also provides complete support for ISO/IEC TS 29113:2012 Further Interoperability with C, part of the current draft of Fortran 2015.

Fortran 2008 features supported include:

  • Maximum array rank has been raised to 31 dimensions (Fortran 2008 specifies 15)
  • Coarrays (Linux* and Windows* only)
    • CODIMENSION attribute
    • SYNC ALL statement
    • SYNC IMAGES statement
    • SYNC MEMORY statement
    • CRITICAL and END CRITICAL statements
    • LOCK and UNLOCK statements
    • ERROR STOP statement
    • ALLOCATE and DEALLOCATE may specify coarrays
    • Intrinsic procedures ATOMIC_DEFINE, ATOMIC_REF, IMAGE_INDEX, LCOBOUND, NUM_IMAGES,
      THIS_IMAGE, UCOBOUND
  • CONTIGUOUS attribute
  • MOLD keyword in ALLOCATE
  • BLOCK construct (Adding ASYNCHRONOUS or VOLATILE attribute to a variable declared outside the BLOCK construct is not yet supported)
  • EXIT can exit a BLOCK construct (16.0 - support for EXIT in other named constructs not yet supported)
  • DO CONCURRENT
  • NEWUNIT keyword in OPEN
  • G0 and G0.d format edit descriptor
  • Submodules (16.0)
  • IMPURE prefix for ELEMENTAL procedures (16.0)
  • Passing internal procedures as actual arguments
  • A procedure pointer can point to an internal procedure
  • In ALLOCATE, if source-object does not have a shape specified, the shape is taken from the SOURCE= argument
  • A CONTAINS section may be empty
  • Intrinsic procedures BESSEL_J0, BESSEL_J1, BESSEL_JN, BESSEL_YN, BGE, BGT, BLE, BLT, DSHIFTL, DSHIFTR, ERF, ERFC, ERFC_SCALED, EXECUTE_COMMAND_LINE, GAMMA, HYPOT, IALL, IANY, IPARITY, IS_CONTIGUOUS, LEADZ, LOG_GAMMA, MASKL, MASKR, MERGE_BITS, NORM2, PARITY, POPCNT, POPPAR, SHIFTA, SHIFTL, SHIFTR, STORAGE_SIZE, TRAILZ
  • Additions to intrinsic module ISO_FORTRAN_ENV: ATOMIC_INT_KIND, ATOMIC_LOGICAL_KIND, CHARACTER_KINDS, INTEGER_KINDS, INT8, INT16, INT32, INT64, LOCK_TYPE, LOGICAL_KINDS, REAL_KINDS, REAL32, REAL64, REAL128, STAT_LOCKED, STAT_LOCKED_OTHER_IMAGE, STAT_UNLOCKED
  • An OPTIONAL dummy argument that does not have the ALLOCATABLE or POINTER attribute, and which corresponds to an actual argument that: has the ALLOCATABLE attribute and is not allocated, or has the POINTER attribute and is disassociated, or is a reference to the NULL() intrinsic function, is considered not present
  • A dummy argument that is a procedure pointer may be associated with an actual argument that is a valid target for the dummy pointer, or is a reference to the intrinsic function NULL. If the actual argument is not a pointer, the dummy argument shall have the INTENT(IN) attribute.

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

Intel Fortran also includes 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:realloc_lhs -assume realloc_lhs
/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.

有关编译器优化的更完整信息,请参阅优化通知