当我编译这个愚蠢的fortran例程时:
SUBROUTINE MY (C,M,NA,A,NB,B,N,V,I1,I2)
IMPLICIT NONE
INTEGER :: M, NA, NB, N, I, J, I1, I2
REAL :: C, A(NA,M), B(NB,M), V(N), X
IF(M.GT.15) THEN
DO I=1,N
X=C*V(I)
CALL DAXPY(M,X,A(I1,1),NA,B(I2,1),NB)
END DO
ELSE
DO I=1,N
X=C*V(I)
DO J=1,M
B(I2,J)=B(I2,J)+A(I1,J)
END DO
END DO
END IF
END SUBROUTINE MY
gfortran -fsanitize=address -O2 -Wall -c a.f90
(gcc版本4.8.4)我收到此警告:
a.f90: In function ‘my’:
a.f90:4:0: warning: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized]
REAL :: C, A(NA,M), B(NB,M), V(N), X
^
并且我无法看到x
如何未被初始化(仅在N < 1
时,但它从未使用过)。如果没有-fsanitize=address
或-O2
,警告就会消失。这些选项中的任何一个都会改变我的代码吗?#34;不安全&#34;方式(发出警告)?更新的gfortran版本会给出相同的消息吗?