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 ответ

Решение

Мы исправили этот ложный положительный результат. Исправление будет доступно в следующем выпуске.

Другие вопросы по тегам