[fpc-devel] inc(QWORD, BYTE) -> range check

Martin Frb lazarus at mfriebe.de
Wed Jan 31 21:15:37 CET 2024


https://www.freepascal.org/docs-html/rtl/system/inc.html
- says it operates on pointers
- also gives examples for unsigned types such as word

But can it be used to increment a QWORD?


       Inc(FAddress, (Opcode div FOwner.FLineInfo.LineRange) * 
FOwner.FLineInfo.MinimumInstructionLength);

FAddress: QWord = $FFFFFFFF02B60000

All values in the expression are of type Byte. Though the question to 
ask may be what the result is cast too....
I know the result of the expression is 0 (zero).
 From the assembler I can see that I passed the div and the multiplication.

And then I got
0000000100CBEC93 48B8FFFFFFFFFFFFFF7F     mov rax,$7FFFFFFFFFFFFFFF
0000000100CBEC9D 4839C2                   cmp rdx,rax
0000000100CBECA0 7605                     jbe +$05    # 
$0000000100CBECA7 NEXTLINE+1815 fpdbgdwarfdataclasses.pas:4556
0000000100CBECA2 E8998535FF               call -$00CA7A67    # 
$0000000100017240 $fpc_rangeerror system.inc:801


which calls range check.

For all I can tell it checks the value of FAddress.
But why does it check it against High(Int64) ?

It is a QWord.


FPC 3.2.3 from Dec 2023


More information about the fpc-devel mailing list