Regression in 3.3.1 / Fatal: Internal error 2015052501
FPC 3.3.1 6d49f7db fails to compile the below Fatal: Internal error 2015052501
FPC 2.3.2 works.
program Project1;
type
TDBGPtr = QWord;
TFpBreakPointMapEntry = record a: integer; end;
PFpBreakPointMapEntry = ^TFpBreakPointMapEntry;
TFpBreakPointMapLocDataPair = record
Location: TDBGPtr;
Data: PFpBreakPointMapEntry;
end;
{ TGenericBreakLocationMap }
generic TGenericBreakLocationMap<_BRK_STORE, _BREAK> = class(TObject)
strict protected type
{ TInternalBreakLocationEntry }
TInternalBreakLocationEntry = packed record
BaseMapEntry: TFpBreakPointMapEntry;
OrigValue: _BRK_STORE;
ErrorSetting: ByteBool;
end;
PInternalBreakLocationEntry = ^TInternalBreakLocationEntry;
private
class function OrigByteFromPointer(AData: Pointer): _BRK_STORE;
class function ErrorSettingFromPointer(AData: Pointer): ByteBool;
public
procedure MaskBreakpointsInReadData(const AAdress: TDbgPtr; const ASize: Cardinal; var AData); //override;
end;
{ TGenericBreakLocationMap }
class function TGenericBreakLocationMap.OrigByteFromPointer(AData: Pointer
): _BRK_STORE;
begin
Result := PInternalBreakLocationEntry(AData)^.ErrorSetting;
end;
class function TGenericBreakLocationMap.ErrorSettingFromPointer(AData: Pointer
): ByteBool;
begin
end;
procedure TGenericBreakLocationMap.MaskBreakpointsInReadData(
const AAdress: TDbgPtr; const ASize: Cardinal; var AData);
var
Brk: TFpBreakPointMapLocDataPair;
begin
//for Brk in Self do begin
if not ErrorSettingFromPointer(Brk.Data) and (Brk.Location >= AAdress) and (Brk.Location < (AAdress+ASize)) then
PByte(@AData)[Brk.Location-AAdress] := OrigByteFromPointer(Brk.Data);
//end;
end;
begin
end.