ifort 15中的意外行为

fti*_*sem 1 fortran

我刚刚在ifort(IFORT)15.0.0 2014072中遇到以下内容

program integerkinds
  use iso_fortran_env
  implicit none

  integer(kind=selected_int_kind(15)):: j15

  print *,'Selected Integer Kind 15:'
  print *, huge(j15)
  print *, int(huge(j15))
  print *, int(huge(j15),kind=selected_int_kind(15))

end program integerkinds
Run Code Online (Sandbox Code Playgroud)

输出为

 Selected Integer Kind 15:
   9223372036854775807
          -1
   9223372036854775807
Run Code Online (Sandbox Code Playgroud)

编译器不应该根据int()的参数自动选择正确的返回类型吗?这种意外的行为只花了我大约2500小时的计算时间在我们的集群上:(

文档说明(http://nf.nci.org.au/facilities/software/intel_fortran_reference.pdf,第9-80页):

Argument Type                                        Result Type
INTEGER(1), INTEGER(2), INTEGER(4)                   INTEGER(4) 
INTEGER(1), INTEGER(2), INTEGER(4), INTEGER(8)       INTEGER(8) 
Run Code Online (Sandbox Code Playgroud)

根据这个表,Integer(8)作为参数应该给出Integer(8)作为结果类型,但输出给出-1.对我来说看起来像个错误,但是在我离开之前,我希望得到第二双眼睛并且知道开发人员.标准中是否有我忽略的要求-1作为返回值在这里?

Ian*_*anH 5

不.那个表是错误的或误导性的(多行,否则没有意义,可能会反映出某些兼容性选项的行为变化,但如果是这样,我不知道它是什么选项).在标准Fortran中,INT泛型内在函数的结果类型仅取决于KIND参数的存在和值.如果不存在KIND参数,则结果具有默认整数种类,否则KIND参数指定结果的KIND.

在没有更改默认整数类型的编译选项的情况下,示例程序中第二次调用INT的参数值不能用该编译器的默认整数表示.您的代码不符合要求.

虽然文本没有实质性改变(除了可能变得更加混乱),我注意到你链接到的文档是古老的.