{ %NORUN } program tw30830a; {$mode objfpc} type generic TBase = class procedure Test1(const a: T); end; generic TDerived = class(specialize TBase) procedure Test2(const a: T); end; procedure TBase.Test1(const a: T); begin end; procedure TDerived.Test2(const a: T); begin end; generic procedure Test(aIntf: specialize TBase); // works begin end; generic procedure Test(aIntf: specialize TDerived); // SIGSEGV :( begin end; var b: specialize TBase; d: specialize TDerived; begin specialize Test(b); specialize Test(d); end.