The analyzer detected a potentially infinite loop with its exit condition depending on a variable whose value never changes between iterations.
Consider the following example:
int Do(int x); int n = Foo(); int x = 0; while (x < n) { Do(x); }
The loop's exit condition depends on variable 'x' whose value will always be zero, so the 'x < 10' check will always evaluate to "true", causing an infinite loop. A correct version of this code could look like this:
int Do(int x); int n = Foo(); int x = 0; while (x < n) { x = Do(x); }
Here is another example where the loop exit condition depends on a variable whose value, in its turn, changes depending on other variables that never change inside the loop. Suppose we have the following method:
int Foo(int a) { int j = 0; while (true) { if (a >= 32) { return j * a; } if (j == 10) { j = 0; } j++; } }
The loop's exit condition depends on the 'a' parameter. If 'a' does not pass the 'a >= 32' check, the loop will become infinite, as the value of 'a' does not change between iterations. This is one of the ways to fix this code:
int Foo(int a) { int j = 0; while (true) { if (a >= 32) { return j * a; } if (j == 10) { j = 0; a++; // <= } j++; } }
In the fixed version, the local variable 'j' controls how the 'a' parameter's value changes.
This diagnostic is classified as: