{ %NORUN } program tatomic9; {$mode objfpc} generic procedure TestInc(var aArg: T); begin AtomicIncrement(aArg); end; generic procedure TestAdd(var aArg1: T; aArg2: T); begin AtomicIncrement(aArg1, aArg2); end; generic procedure TestXchg(var aArg1: T; aArg2: T); begin AtomicExchange(aArg1, aArg2); end; generic procedure TestCmpXchg(var aArg1: T; aArg2, aArg3: T); begin AtomicCmpExchange(aArg1, aArg2, aArg3); end; generic procedure TestCmpXchg(var aArg1: T; aArg2, aArg3: T; out aArg4: U); begin AtomicCmpExchange(aArg1, aArg2, aArg3, aArg4); end; var l: LongInt; b: Boolean; b32: Boolean32; lb: LongBool; begin l := 0; specialize TestInc(l); specialize TestAdd(l, 42); specialize TestXchg(l, 21); specialize TestCmpXchg(l, 21, 84); specialize TestCmpXchg(l, 84, 42, b); specialize TestCmpXchg(l, 84, 42, b32); specialize TestCmpXchg(l, 84, 42, lb); end.