You are confusing things. TBlock is a record, not a pointer to a record and so does not need de-referencing.
Look at this example:
program untitled;
// {$mode objfpc} // this fails.
{$mode delphi} // this works.
type
Tblock = record
Fattr:integer;
end;
PBlock = ^TBlock;
var
myblock:pblock;
begin
New(MyBlock);
Myblock.Fattr:=0;
writeln(myblock.fattr);
Dispose(myblock);
end.
See the difference with your code?
When compiling in {$mode delphi}, pointer de-referencing is
optional.
When compiling in {$mode objfpc}, pointer de-referencing is
mandatory.
Whereas this code compiles in both modes, since it does not even use a pointer to the record:
program untitled;
// {$mode objfpc} // this works.
{$mode delphi} // this works too.
type
Tblock = record
Fattr:integer;
end;
var
myblock:Tblock;
begin
Myblock.Fattr:=0;
writeln(myblock.fattr);
end.