On Fri, November 29, 2013 11:00, Klaus Hartnegg wrote: > On 28.11.2013 18:32, Tomas Hajny wrote: >> On Thu, November 28, 2013 18:12, Klaus Hartnegg wrote: >>> Sorry, I forgot to mention there is {$Q-} in the source. >> >> I believe that $Q- covers overflow checks, not range checks. > > Thanks, this showed me the right direction. > > Explanation: I'm trying to port code from Turbo Pascal. There > word1-word2 does wrap around with {$Q-}{$R+}. And dec(word1) never > checks for overflow, even with {$Q+}{$R+}. > > FreePascal seems to have a wider definition of Range Check, and the > inc() and dec() functions do check for overflow.
This is because TP is 16-bit (word), whereas FPC (in particular your compilation target in FPC) is 32-bit (longword). > The longint trick prevents runtime error 201, but causes runtime error > 215 if the longword value does not fit into longint. > > On closer look this is all behaving like documented, just different from > TurboPascal (maybe it would have worked in TP-compatibility-mode). {$MODE TP} wouldn't change this. Only the i8086-msdos target (16-bit) should behave the same way as TP from this point of view. > The correct fix is to simply add {$R-} to the code wherever it currently > has {$Q-}. I have just done this, and now it passes the test. That was indeed one of my proposed solutions ({$R-} is equivalent to {$OVERFLOWCHECKS OFF}). Tomas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal