静态分析工具,用于检测由于类型提升而导致的无休止循环

Static analysis tool to detect endless loop due to type promotion?

本文关键字:循环 无休止 类型 用于 工具 检测 于类型 静态分析      更新时间:2023-10-16

我刚刚在复杂数据结构的反序列化例程中发现了一个有趣的错误:

int32_t nrElements;
buffer->deserialize( &nrElements );
for( int16_t i=0; i<nrElements; ++i ) {
    // deserialize element
}

如果nrElements小于215,这会很好地工作,但在其他情况下会导致无限循环。有没有静态分析工具可以检测这种错误?GCC没有对此发出警告。

我认为GCC不支持对此发出警告。我想你可以使用模板函数和静态断言来实现这一点:

template<typename T1, typename T2>
bool safeLess(T1 left, T2 right)
{
    static_assert(std::is_same<T1, T2>::value);
    return left < right;
}

然而,我真的怀疑它的有用性,因为它扰乱了代码(可能会妨碍一些编译器优化)。