Hi
In certain circumstances when using floats in for loops the termination value is not calculated correctly.
Example
float[] myArray(70);
float aSize = 8;
float MyFunction(float a)
{
return a;
}
void Test()
{
for (float k = 0; k< aSize; k++)
{
myArray[MyFunction(k*aSize)] = k;
}
for (int i = 0; i< aSize*aSize; i++)
{
Print("i = " + i + "\n");
myArray = i;
}
}
In the above example the 2nd for loop should terminate at 64 but it keeps going until it eventually crashes with an out of bounds exception when it hits 70.
Remove the 1st for loop and the 2nd for loop stops at 64 as expected.
Remove the call to MyFunction and the 2nd loop works.
Remove the *aSize in the 1st for loop and the 2nd loop works.
Compiled Bytecode
31 8 * SUSPEND
32 8 * CpyVtoV4 v4, v1
34 8 * iTOf v4
35 8 * CpyGtoV4 v5, 1
37 8 * CpyGtoV4 v4, 1
39 8 * MULf v5, v5, v4
41 8 * CMPf v4, v5
43 8 * JNS +55 (d:100)
I don't fully understand the above but it looks like v4 is getting overwritten before it is used.
I am using the svn version of AngelScript from today but this problem is also in version 2.5.0b.
Thanks.