Corrupted argument on x86, aargh.
~How tired I am, this so-called professional Pascal compiler is absolutely unusable for anything, how does it even manage to compile itself (sorry for the outburst, but it's driving me mad).~
Run this test on `i386/win32` or `x86-64/win64` with `-O3`:
```pascal
{$mode objfpc} {$modeswitch anonymousfunctions}
type
pAdapter = ^Adapter;
Adapter = record
start: SizeUint;
adaptee: procedure(p: pointer; a, b: SizeUint);
end;
procedure UseAdapter(ad: pAdapter; a, b: SizeUint);
begin
ad^.adaptee(nil, ad^.start + a, ad^.start + b);
end;
var
ad: Adapter;
oops: boolean = false;
begin
ad.start := 10;
ad.adaptee :=
procedure(p: pointer; a, b: SizeUint)
begin
if p <> nil then begin writeln('p = ', PtrUint(p), ', should be 0.'); oops := true; end;
if a <> 110 then begin writeln('a = ', a, ', should be 110.'); oops := true; end;
if b <> 1010 then begin writeln('b = ', a, ', should be 1010.'); oops := true; end;
end;
UseAdapter(@ad, 100, 1000);
if oops then halt(1);
end.
```
My output, `x86/64`:<br>
`a = 4295020660, should be 110`
`i386/win32`:<br>
`a = 4239476, should be 110`
issue