blob: f4e46905955fd0ad0a2a8755c5ba56df0067a117 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
{$packrecords 1}
{$r-}
var
r: record
i: int64;
p: pointer;
w: smallint;
end;
var
i: longint;
b: byte;
orgp,oldp,newp: pointer;
begin
r.i:=-1;
r.w:=-1;
b:=$12;
ptruint(r.p):=b;
for i:=2 to sizeof(r.p) do
begin
b:=b*3;
ptruint(r.p):=ptruint(r.p) shl 8 or b;
end;
orgp:=r.p;
newp:=pointer(not ptruint(orgp));
oldp:=InterlockedCompareExchangePointer(r.p,newp,r.p);
if oldp<>orgp then
halt(1);
if r.p<>newp then
halt(2);
if r.i<>-1 then
halt(3);
if r.w<>-1 then
halt(4);
end.
|