[fpc-devel] Bug #0021641: Array of const gives check range error
patspiper
patspiper at gmail.com
Wed Apr 4 13:07:06 CEST 2012
On 04/04/12 12:23, Jonas Maebe wrote:
> Paul Ishenin wrote on Wed, 04 Apr 2012:
>
>> 04.04.2012 17:08, kyan ???????:
>>>>> Delphi doesn't support qword at all, so there is no Delphi
>>>>> behaviour to
>>>>> be compatible with in that case. Or at least it didn't when the above
>>>>> was implemented. Does it now?
>>>>
>>>>
>>>> No, it does not.
>>>
>>> Delphi XE has a UInt64 type. From the documentation:
>>>
>>> UInt64 represents a subset of the whole numbers. The range for the
>>> UInt64 type is from 0 through 2^64-1. The UInt64 format is unsigned
>>> 64-bit.
>>>
>>> Therefore it is equivalent to FPC's QWord type.
>>
>> The question was about TVarRec structure, was not it?
>
> Yes and no: the reason we don't have a dword/cardinal field in tvarrec
> and therefore automatically typecast dword/cardinal to longint when
> passing them to an array of const, is because Delphi doesn't have a
> dword/cardinal field in tvarrec either. Otherwise, Delphi code would
> break when compiled in FPC when passing dwords to tvarrec, since the
> called routine would expect the type to be VTInteger, while FPC would
> mark it is VTDWord or so.
>
> We did not have this problem with qword, because Delphi didn't support
> qword. However, if it does support qword now and nevertheless passes
> those values in the VInt64 field of tvarrec, then we have a problem:
> we have to choose between breaking backwards FPC compatibility or
> remaining Delphi incompatible. We cannot change it based on the
> compilation mode, because the "most likely correct behaviour" depends
> on the mode in which the called routine is compiled, not the caller
> (and we don't keep track of that, and I don't think we should either
> -- what syntax mode someone else wrote their code in is not something
> a programmer should have to care about).
>
> I guess we'll have to document this as a known incompatibility.
That explanation sums up well the dilemma.
IMHO, having Arrays of const that include Dword or Qword variables or
constants result in a warning would be a good compromise in addition to
documenting the incompatibility.
Stephano
More information about the fpc-devel
mailing list