summaryrefslogtreecommitdiff
path: root/tests/webtbs/tw29964.pp
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.