Never used variants much. But the below compiles, and then gives a SigSegV (w32). Is that to be expected? Or ? program Project1; {$mode objfpc}{$H+} uses Classes; procedure Foo(v1,v2: Variant; constref v3,v4: Variant); begin writeln(v1,v2,v3,v4); end; begin Foo(1,'a',2,'bc'); // <<<<<<< Fails in this line end.