[fpc-pascal] QWord/UInt64 and Range Check Errors

Jonas Maebe jonas.maebe at elis.ugent.be
Thu Jun 25 20:42:21 CEST 2009


On 25 Jun 2009, at 20:33, Inoussa OUEDRAOGO wrote:

> 2009/6/25 Jonas Maebe <jonas.maebe at elis.ugent.be>:
>>
>> On 25 Jun 2009, at 20:14, Inoussa OUEDRAOGO wrote:
>>
>>> as it makes one doubtfull about
>>> the correctness of the program( In my case I debugged the program to
>>> be sure that the "good" value was assigned).
>>
>> When it's changed, you will get the warning/error when assigning  
>> this value
>> to an int64 and then those cases can be debugged.
>
> and that seems more accurate to me

It's equally accurate. A hex number does not contain any sign  
information, so both interpretations are valid.

>> to an int64 and then those cases can be debugged. It's the same  
>> when we
>> changed from parsing $80000000-$FFFFFFFF as a longint to parsing it  
>> as a
>> cardinal. Suddenly a whole bunch of code no longer worked correctly  
>> anymore
>> then either, and we got a bunch of questions why code no longer  
>> compiled or
>> produced warnings.
>
> IMHO warnings/errors should be reported as one is actually in a "out
> of range" case. But if some code depends on this ( such as a bit mask
> ) changing the behavior of the compiler can effectively be harmfull.
> I think that should be up to the people (ab)using the parser this way
> to correct their code by doing a explicit typecast.

There is no abuse of the parser. The parser has, since the very first  
moment that int64 and qword were supported in FPC, always parsed such  
numbers as int64. So people using it like that, are using it as  
designed. In fact, before Delphi supported uint64, it also parsed such  
values as int64.


Jonas



More information about the fpc-pascal mailing list