LOC和%LOC无法在Windows上的子例程中工作

时间:2015-02-07 11:31:46

标签: windows fortran fortran90 intel-fortran

我有一个Fortran 90项目,该项目广泛使用loc函数来获取数组的地址(用于与Matlab互操作的API的一部分)。

此代码使用Intel和gfortran在Mac和Linux上编译和工作,并且已经有一段时间了(跨越几个不同的编译器版本)。

我现在正在尝试使用Composer XE 2015中的英特尔Fortran在Windows上构建。当我逐步使用调试器时,我看到我的main函数中的LOC调用正确地返回了地址,但调用的子例程中的调用似乎是什么都不做 - 它只返回数据的值而不是位置。

有没有人知道为什么LOC不起作用?我尝试过loc()和%LOC()并获得相同的行为。有关示例,请参阅this function。第69行的loc工作,第116行的loc不工作(只返回数据的值)。 REPIDX_0(X,1)是一个预处理器宏,在这种情况下只返回X。

任何建议或指示都会受到赞赏 - 我完全被卡住了。

这是一个最小的例子:

program testloc
  implicit none
  real, pointer :: x
  integer(8) :: add1, add2

  allocate(x)
  x = 2
  add1 = loc(x)
  call get_add(x,add2)
  write(*,*) add1
  write(*,*) add2
  deallocate(x)
contains
  subroutine get_add(x,add)
      real, pointer, intent(in) :: x
      integer(8), intent(out) :: add
      add = loc(x)
  end subroutine
end program

在带有ifort 12.1.3的Mac / Linux上我得到了预期的输出:

MatlabAPI_lite robince$ ./a.out
       140661969926608
       140661969926608

在使用ifort 15.0.1的Windows上,我得到了有问题的输出:

c:\code\MatlabAPI_lite>testloc
         4636400
               2

1 个答案:

答案 0 :(得分:2)

这是一个编译器错误 - 它在15.0.3中修复。