Access Violation in TEqualityComparer<T>.Default when used with a non-contiguous enum

Summary

If you try to TEqualityComparer.Default it crashes with an AV. SomeEnum must be an enum with assigned, non-contiguous values, like 1 and 4.

System Information

  • Operating system: Windows
  • Processor architecture: x86-64
  • Compiler version: trunk Lazarus 3.99 (rev main-2_3-4494-g946040a582) FPC 3.3.1 x86_64-win64-win32/win64
  • Device: Computer

Steps to reproduce

Just try to call a TEqualityComparer.Default where SomeEnum is a simple enum with assigned, non-contiguous values.

Example Project

program project1;
{$mode delphi}
uses Generics.Defaults;
type
  SomeEnum = (zero = 0, two = 2);
var
  z: IEqualityComparer<SomeEnum>;
begin
  z:= TEqualityComparer<SomeEnum>.Default;
  WriteLn('Done');
  ReadLn;
end.

bug-in-TEqualityComparer.Default.zip

What is the current bug behavior?

Access Violation

What is the expected (correct) behavior?

No error

Relevant logs and/or screenshots

image

image