[fpc-devel] Implicit Type Conversion when running with range and overflow checking

Louis Salkind lou at salkind.net
Wed Feb 25 00:47:26 CET 2015

Pardon the stupid question(s)...  I was surprised by the behavior of the 
following code when range checking and overflow checking was enabled on 

procedure test_rangeoverflow;
   a, b: BYTE;
   i: Integer;
   a := 128;
   b := 129;
   i := a + b;   // no errors, i is 257; a and b have been promoted to 
                 // but shouldn't there be a range check, as a+b has 
overflowed a byte and should not be promoted?
   i := BYTE(a + b);    // no errors, and i is 1.  Even if a+b is 
promoted to integer,
                        // shouldn't there be range check when coercing 
and integer of 257 to byte?
   a := a + b;    // gives range check when storing result, but not an 
overflow error first

Comments?  I'm guessing this is either specified in the Pascal standard, 
or fpc is emulating Delphi behavior.  Nevertheless, the result seemed 
non-intuitive enough to me that I wanted to confirm this was the 
intended behavior.

More information about the fpc-devel mailing list