分配时Fortran(重新)分配和gfortran警告

分配时Fortran(重新)分配和gfortran警告,fortran,compiler-warnings,gfortran,gcc-warning,allocatable-array,Fortran,Compiler Warnings,Gfortran,Gcc Warning,Allocatable Array,一个简单的代码: program main integer, allocatable :: A(:,:) integer :: B(3,4) B=1 A = B !A will get allocated, with the same shape and bounds as B end program main 使用以下代码编译上述代码:gfortran-8-std=f2008-fcheck=all-Wall-Wextra-fbounds check-fimplic

一个简单的代码:

program main
integer, allocatable :: A(:,:)
integer              :: B(3,4)
B=1
A = B  !A will get allocated, with the same shape and bounds as B
end program main
使用以下代码编译上述代码:
gfortran-8-std=f2008-fcheck=all-Wall-Wextra-fbounds check-fimplicit none array.f90

我得到以下警告:

警告:此函数中可能未初始化就使用了“a.offset”
警告:“a.dim[0].lbound”可能未初始化就用于此函数中
警告:“a.dim[0].ubound”在此函数中可能未初始化使用[-Wmaybe uninitialized]


有人知道我为什么会收到这些警告吗?

这是一个众所周知的GCC错误,已经向bugzilla报告了许多副本(甚至是我自己)-请参阅其他版本的副本部分


据我所知,编译器生成的实际代码应该正常工作,这只是一个错误的警告。正如Steve在评论中指出的,使用
-Wno-maybe uninitialized
隐藏此警告。我也将其包含在我的构建脚本中。

您收到这些警告是因为您使用了“-Wall-Wextra”选项。@Steve是的,我尝试打开所有警告,以了解编译器是否存在任何问题,如果这些问题不是由于编译器本身的错误造成的。在这种情况下,如果我在赋值之前添加write(,)size(A),警告将消失,表明这很微妙。可能gfortran-8不喜欢分配时的“(重新)分配”?请注意,在分配使程序无效之前,
write(*,*)size(a)
。@francescalus查询未分配数组的大小是不合理的,但gfortran没有对此发出警告。“可能未初始化”意味着编译器无法判断实体是否被赋值。这些实体是编译器内部的。如果不想看到警告,请使用-Wno-maybe-uninitialized。谢谢。实际上,在我提出问题之前,我已经阅读了这些bug报告。我只是想知道这里的一些人是否能提供一些见解或其他观点来解释为什么格夫特兰会这样想。当Bugzilla直接从马嘴里得到信息时,你还想要什么?如果你以前读过的话,你应该在问题中提到这一点。我应该说我浏览了一些bug报告,没有弄清楚到底发生了什么。我想应该有一个简单的解释来解释为什么会出现这个bug(如果是的话),或者是什么原因导致gfortran发出了一些误导性的警告。如果有一个简单的解释,那么问题现在已经解决了。正如我在另一篇评论中所说的,gfortran中的分配代码是编译器中一些更复杂的代码。修复它并不容易。