Language guide: Field order when initializing constant records
https://www.freepascal.org/daily/doc/ref/refse24.html
You can omit fields that you don’t wish to initialize, in fact you can skip all fields. If you skip fields, the compiler will emit a warning.
...
The order of the fields in a constant record needs to be the same as in the type declaration, otherwise a compile-time error will occur.
As far as I can see, the order of fields must not only be sequential but also must not skip fields (between), and must start with the first item (or omit all):
program Project1;
type
TPoint = record
x, y, z: integer;
end;
var
p1: TPoint=(x: 1; y: 2; z: 3); // OK
p2: TPoint=(x: 1; y: 2); // OK
p3: TPoint=(x: 1); // OK
p4: TPoint=(); // OK
p5: TPoint=(x: 1; z: 3); // ERROR
p6: TPoint=(y: 2; z: 3); // ERROR
p7: TPoint=(z: 3); // ERROR
begin
end.
Reproduced in 3.2.2 and trunk. For lines with errors, it produces output like this:
project1.lpr(8,25) Warning: (3177) Some fields coming after "y" were not initialized
project1.lpr(9,19) Warning: (3177) Some fields coming after "x" were not initialized
project1.lpr(10,15) Warning: (3177) Some fields coming after "" were not initialized
project1.lpr(11,24) Error: (3176) Some fields coming before "z" were not initialized
project1.lpr(11,26) Fatal: (2003) Syntax error, "identifier" expected but ";" found