-wstrict-overflow 不会在明显应该产生任何警告的地方

-Wstrict-overflow doesn't produce any warnings where it clearly should

提问人:Michael Mahn 提问时间:5/17/2021 最后编辑:Aykhan HagverdiliMichael Mahn 更新时间:5/17/2021 访问量:276

问:

根据 g++ 手册页及其网站 https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html,以下代码在使用 -O3 -Wstrict-overflow=5 编译时应产生警告:

#include <iostream>
#include <limits>

int
main() {
    int x{std::numeric_limits<int>::max()};
    if(x+1 > x) std::cout << "Hello";
}

https://godbolt.org/z/57ccc33f3

它甚至输出“Hello”,表明它优化了检查(x+1 > x)。但是,我没有得到任何警告。是我误解了这个警告的意思,还是这是一个gcc错误?我在他们的错误数据库中找不到任何东西。

C GCC G++ 警告

评论

0赞 eerorika 5/17/2021
“Bug”有点强。永远无法保证编译器能够检测到所有溢出,无论它们对您来说多么明显。就其价值而言,当变量为编译时常量时,它似乎确实检测到溢出。
1赞 Jarod42 5/17/2021
“-Wstrict-overflow=1” “警告那些既有问题又容易避免的情况。例如,编译器将 x + 1 > x 简化为 1。你的情况甚至是 1 级

答:

4赞 Aykhan Hagverdili 5/17/2021 #1

这绝对是 GCC 7.58.1 之间引入的错误。请务必报告。这个特定的例子甚至在文档中。

评论

1赞 Jarod42 5/17/2021
我什至会说,甚至在此之前,因为 1 级应该已经根据他们的文档警告它......
0赞 Michael Mahn 5/18/2021
那我会的。我想首先确保我没有忽略某些东西。