我有一个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
答案 0 :(得分:2)
这是一个编译器错误 - 它在15.0.3中修复。