RangeAnalysis и 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 'i
Выражение V3022 'i <= int.MaxValue - 1' всегда верно.
Выражение V3022 'i <= int.MaxValue' всегда верно.
Об ошибке в последнем цикле сообщается правильно, но два первых предупреждения являются ложными срабатываниями.
1 ответ
Решение
Мы исправили этот ложный положительный результат. Исправление будет доступно в следующем выпуске.