这个"是否可以使用未初始化的"警告虚假?

时间:2016-05-06 11:59:18

标签: fortran warnings gfortran sanitizer

当我编译这个愚蠢的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版本会给出相同的消息吗?

0 个答案:

没有答案