A strange div bug on Linux x86_64, (both dmd & ldc2): long -5000 / size_t 2 = 9223372036854773308

Patrick Schluter Patrick.Schluter at bbox.fr
Thu Aug 13 21:06:58 UTC 2020


On Thursday, 13 August 2020 at 19:03:38 UTC, H. S. Teoh wrote:
> On Thu, Aug 13, 2020 at 06:51:09PM +0000, mw via Digitalmars-d 
> wrote:
>> On Thursday, 13 August 2020 at 18:40:40 UTC, matheus wrote:
>> > On Thursday, 13 August 2020 at 13:33:19 UTC, bachmeier wrote:
>> > > ...
>> > > The source of wrong behavior is vec.length having type 
>> > > ulong. It
>> > > would be very unusual for someone to even think about that.
>> > 
>> > May I ask what type should it be?
>> 
>> Signed (size_t, the length of the machine's address space)
> [...]
>
> size_t is unsigned, because the address space of a 64-bit 
> machine is 2^64, but a signed value would only be able to 
> address half of that space (2^63).
>
While the rationale makes sense and I'm definitely in the camp of 
unsigned size_t, signed addresses can without problem access the 
whole address range. The other half will then be addressed with 
negative numbers. The last address 0xFFFFFFFFFFFFFFFF is -1L 
(that's what was used on Apple II integer basic, which only had 
signed 16 bit integers as variable type, that's why entering 
monitor was done with CALL -151 and not CALL 65385).



More information about the Digitalmars-d mailing list