当它隐含地将REAL(4)提升为REAL(8)时,如何让gfortran或ifort告诉我?

时间:2015-08-17 15:35:09

标签: fortran compiler-warnings fortran90 gfortran

我的任务是改变HPC应用程序部件的精度,同时要记住它严重依赖自动矢量化。因此,编译器在发生任何类型的浮点转换的转换时通知我是有用的(因为这可能会对性能造成严重影响)。

-Wconversion标志听起来应该符合我的需要:

  

-Wconversion

     

警告不同类型之间的隐式转换。

           

https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gfortran/Warning-Options.html

但是,实际上,gfortran 5.2.0似乎只报告浮点降级,例如 REAL(8)REAL(4)

GCC有-Wdouble-promotion标志 - 正是我需要的,但不适用于gfortran。 (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

我正在和gfortran一起开发,但ifort可供我使用。但是,我找不到-warnhttps://software.intel.com/en-us/node/525184)的任何类似论据。

如果隐式提升REAL,我怎么能让这些编译器发出警告?

1 个答案:

答案 0 :(得分:2)

您指的是使用gfortran 5.2.0,所以让我们看看该版本的文档而不是4.1.0。对于您的考虑,这有two relevant flags

  

-Wconversion
      警告可能会在转换后更改表达式值的隐式转换。 -Wall暗示   -Wconversion-额外
      警告不同类型和种类之间的隐式转换。此选项并不意味着-Wconversion。

如果我将后一个标志用于以下程序

use, intrinsic :: iso_fortran_env, only : real32, real64
real(real64) x
x = 1._real32
end

我完全(尽管使用gfortran 4.8.1)在问题标题

中请求了警告消息
  

警告:在(1)

从REAL(4)转换为REAL(8)

而只有-Wconversion我什么都没得到。但是,如果我稍微更改程序,以便更改可表示的值,我会得到(不同的)警告。