RangeAnalysis 和 V3022

RangeAnalysis and V3022

考虑以下代码:

for (var i = int.MaxValue - 2; i < int.MaxValue; i++)
{
    Console.WriteLine(i);
}
Console.WriteLine();

for (var i = int.MaxValue - 2; i <= int.MaxValue - 1; i++)
{
    Console.WriteLine(i);
}
Console.WriteLine();

for (var i = int.MaxValue - 2; i <= int.MaxValue; i++)
{
    Console.WriteLine(i);
}

前两个循环预计只会打印出第三大和第二大整数。 最后一个循环有一个错误,其中 i 会溢出到 int.MinValue 并导致无限循环。

运行 它给出了预期的输出。

2147483645
2147483646

2147483645
2147483646

2147483645
2147483646
...

PVS Studio 提出三个警告:

V3022 Expression 'i < int.MaxValue' is always true.

V3022 Expression 'i <= int.MaxValue - 1' is always true.

V3022 Expression 'i <= int.MaxValue' is always true.

正确报告了最后一个循环中的错误,但前两个警告是误报。

我们已经修复了这个误报。该修复程序将在下一个版本中提供。