0

当我编译这个愚蠢的 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。这些选项中的任何一个是否以某种“不安全”的方式更改了我的代码(例如发出警告)?更新的 gfortran 版本是否给出相同的信息?

4

0 回答 0