【问题标题】:-Wstrict-overflow doesn't produce any warnings where it clearly should-Wstrict-overflow 不会产生任何明显应该发出的警告
【发布时间】:2021-08-06 18:32:44
【问题描述】:

根据 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”,表明它优化了 check(x+1 > x)。但是我没有收到任何警告。我是否误解了这个警告的含义或者这是一个 gcc 错误?我在他们的错误数据库中找不到任何东西。

【问题讨论】:

  • “Bug”有点强。永远不能保证编译器能够检测到所有溢出,无论它们对您来说多么明显。值得一提的是,当变量为编译时常量时,它似乎确实检测到了溢出。
  • "-Wstrict-overflow=1" "警告有问题且容易避免的情况。例如,编译器将 x + 1 > x 简化为1."。你的情况甚至是 1 级

标签: c++ gcc g++ warnings


【解决方案1】:

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

【讨论】:

  • 我什至会说,因为 1 级应该已经根据他们的文档发出警告......
  • 那我会的。我想首先确保我没有忽略任何事情。
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2011-06-02
  • 2021-09-08
  • 1970-01-01
相关资源
最近更新 更多