Combining value and reference Int64 params of an inline function can produce erroneous behavior.
Original Reporter info from Mantis: dexter2048
-
Reporter name: Leo Brückner
Original Reporter info from Mantis: dexter2048
- Reporter name: Leo Brückner
Description:
Value-passed Int64 parameter is treated as referenced-passed when the function is inlined. On one hand, this behavior is logical. However, I think that the inline directive should not change semantics of the code.
Steps to reproduce:
procedure DivMod(a: Int64; b: Int64; out res, rem: Int64); // inline;
begin
res:=a div b; rem:=a-b*res;
end;
procedure Test;
var
res, rem: Int64;
begin
res:=5; DivMod(res {!}, 2, res {!}, rem);
Assert(res=2); // OK
Assert(rem=1); // "2-2*2 = -2" if inlined
end;
Mantis conversion info:
- Mantis ID: 24189
- Platform: reproduced for win32 and win64
- Version: 2.6.2
- Fixed in version: 3.1.1
- Fixed in revision: 34290 (#20cbdf75)