GCC strict-overflow
GCC strict-overflow
本文关键字:strict-overflow GCC 更新时间:2023-10-16
我们最近为一个大型代码库打开了- strict-overflow=5,并试图理解当优化打开时的~500个警告。有些似乎是合法的,但还有这样的事情:
std::vector<std::string> files;
// ...
void Add (const std::string file)
{
if (std::find(files.begin(), files.end(), file) == files.end())
{
files.push_back(file);
}
}
产生警告:
example.cc: In member function ‘void Add(std::string)’:
example.cc:465:8: error: assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C2 -+ C1 [-Werror=strict-overflow]
void Add (const std::string file)
^
我假设比较是在std::find()
中,并通过内联Add()
函数暴露。
我该如何解决这个问题?
是的,我读过其他的堆栈溢出问题,但没有什么很有用的:
23020208 std::find
在std::set
上。答案:GCC bug,关闭警告
我该如何解决这个问题?
由于它们是由您无法控制的东西(即GCC)引起的假阳性,因此您需要调整它:
- 一个接一个地处理它们(这就是为什么您首先启用它们,以检测可能发生溢出的地方,对吗?)
- 对于那些编译器正确的地方,应用更正
- 对于假阳性的地方,使用#pragma在本地禁用警告- #pragma的存在将意味着:"尽职调查已支付,我检查过了,这里没有任何可能溢出的东西"
(宁静的祈祷可能有帮助)
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 数据成员SFINAE的C++17测试:gcc vs clang
- GCC对可能有效的代码抛出init list生存期警告
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用gcc从静态链接的文件中查找可选符号
- 普通环路未使用gcc 4.8.5自动矢量化
- 有了gcc,是否可以链接库,但前提是它存在
- 在clang++预处理器中确定gcc工具链版本
- 为什么 gcc 编译这个而 msvc 没有
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 使用GCC 5.2.0构建Chromium: - strict-overflow=1警告
- c++和strict-overflow的问题
- GCC strict-overflow