Issue happens on Win32 and Linux64.
Needs to be investigated and check it doesn't happen elsewhere.
type TVec3 = packed record X,Y,Z: Byte; end; // Force CompareMem usage (Size <> 4,8,16,32) on record op_Equal
function Buggy: Boolean;
var
Test: record A, B: TVec3; end;
begin
Result := False or (Test.A <> Test.B);
WriteLn('Bug: ', Result); // True ??
WriteLn(False or (Test.A <> Test.B)); // False - Correct
end;
begin
Buggy();
end.
<niels> That line basically says Stack[StackPos - 4] := NOT Stack[StackPos - 4]
<niels> The IncStackPos after that shouldn't be there
<niels> Because we overwrite the old value on the stack, not push another value on it
Issue happens on Win32 and Linux64. Needs to be investigated and check it doesn't happen elsewhere.