compilation - 在编译或运行时检测错误的别名
问题描述
是否有一些工具(或编译标志)可以在编译期间或运行时检测 Fortran 代码中有问题的别名?我看到 gfortran 有-Waliasing
,但它只检测到最严重的情况(例如call whatever(x,x)
,但不是call whatever(x(1),x(1))
)。英特尔的 ifort 有-fno-alias
,但显然这只是意味着编译后的代码可能会给出不同的结果。考虑这样的代码:
program main
implicit none
real :: x(100)
integer :: i
do i=1,size(x)
x(i) = i
end do
call sub(100,x(1:100),x(1:100))
contains
subroutine sub(n,a,b)
implicit none
integer, intent(in) :: n
real, intent(in) :: a(n)
real, intent(out) :: b(n)
b(:) = a(:)
end subroutine sub
end program main
我没有收到任何警告(编译或运行),因为x(1:100)
两个虚拟参数(a
和b
)使用相同的内存地址(),其中一个被修改,据我所知,这是标准禁止的.
解决方案
推荐阅读
- sql - 没有 SUM/Count 或更好方法的数据透视表
- html - 使用 Rvest 和 Selector 小工具解决问题(新程序员需要帮助)
- python - 使用 Python 3.7.4 在 Windows 上运行 TensorFlow 时出错
- kylin - 在自定义环境中安装 Apache Kylin
- sql - 用于查找维度表的所有事实表和桥的 SQL 查询
- arrays - 是否可以将 AngularJS 函数存储在数组中并将函数放在 ng-click 中?
- robotframework - Ctrl+B 快捷键在机器人框架上的 python 3 中不起作用
- javascript - 解析浮动和按钮单击
- python - IBM-Watson 的“VisualRecognitionV3”使用问题
- python - Pywinauto 无法找到/关闭弹出窗口