The default is off, because there is legitimate code that uses this behaviour,
That range checking is off by default is fine. What is NOT fine is that when a constant that is out of bounds is used, the compiler should NOT accept that because it knows it is not just a bounds violation, it is also a data type violation.
Of course, it's a different story when using variables, because obviously the compiler cannot know if a variable is out of bounds at compile time, which is implicit in the example you provided but, that example doesn't apply at compile time because it uses variables instead of constants.
especially when interfacing with code like the Windows API:
tagSAFEARRAY = record
cDims: USHORT;
fFeatures: USHORT;
cbElements: ULONG;
cLocks: ULONG;
pvData: PVOID;
rgsabound: array[0..0] of SAFEARRAYBOUND;
end;
TSafeArray = tagSAFEARRAY;
SAFEARRAY = TSafeArray;
This is from the ActiveX unit. With bounds checks enabled one wouldn't be able to access all elements of rgsabound.
Anyway, I know this is not going to change (unfortunately) but, for the OP, a _correctly_ implemented Pascal compiler would NOT accept a constant index out of the array bounds and, as an example, Delphi refuses it (as it should.)