静态分析工具检测由于类型提升而产生的无限循环?

时间:2014-10-14 08:29:19

标签: c++ infinite-loop static-analysis

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

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

如果nrElements小于2 15 ,这很有效,否则会导致无限循环。是否有可以检测此类错误的静态分析工具?海湾合作委员会没有对此发出警告。

1 个答案:

答案 0 :(得分:2)

我认为海湾合作委员会不支持对此发出警告。我想你可以使用模板函数和静态断言实现这一点:

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

但是,我真的怀疑它的有用性,因为它使代码混乱(并且可能妨碍了一些编译器优化)。