我的大多数-fsanitize=unsigned-integer-overflow
错误都是错误,但有时我会按预期明确使用它,这会导致 UBSan 产生误报。
有没有办法为特定表达式关闭 UBSan 无符号整数溢出检查?
编辑以回应 Shafik 评论,这里是一个例子:
unsigned a = 0;
unsigned b = a - 1; // error: unsigned integer overflow
大多数时候这是一个错误,有时不是。使用 UBSan,每次发生这种情况时都可以找到并修复错误,但我还没有找到一种方法来消除误报。
编辑 2:启用检查需要通过-fsanitize=integer
(启用所有整数检查)或fsanitize=unsigned-integer-overflow
. 从下面的评论看来,该检查仅在 clang 中可用,而在 GCC 中尚不可用。