summaryrefslogtreecommitdiff
path: root/tests/webtbs/tw12255.pp
blob: 92ab921c0dfc6100dbaf0f65e05d75477d4aa7db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{ %target=win32 }
{$mode objfpc}
uses sysutils
    , windows
    ;
var
    SharedInt : PInteger;
    target : integer;
    savetarget : integer;

begin
    target := 0;
    savetarget := system.InterlockedCompareExchange(Target, 1, 0);
    Writeln(format('%d = InterlockedCompareExchange(Target= %d , 1, 0)',[savetarget, target]));
    SharedInt := AllocMem(SizeOf(Integer));
    SharedInt^ := 0;
// here is runtime exception rised - access to invalid memory
    savetarget := windows.InterlockedCompareExchange(SharedInt^, 1, 0);
    Writeln(format('%d = InterlockedCompareExchange(SharedInt^= %d , 1, 0)',[savetarget, SharedInt^]));
    FreeMem(SharedInt);
end.