I think there's a bug somewhere when compiling math operators and using implicit conversion functions. The following test fails.
int x = 1;
class A
{
int val;
A(int x)
{
val = x;
}
int opImplConv()
{
return val;
}
}
A myA(5);
void main()
{
assert(myA + (x + 1) == myA + x + 1);
}
The error seems to be that after the CALLINTF instruction for A::opImplConv there is no following CpyRtoV4. The error is in the bytecode generated on the left side of the comparison.
Also, if the global declaration of "x" is removed and a local declaration of "x" is added to the main function the bug is gone.