<snip> while 64-bit gives ERangeError: Range check error (RTE 201). That's with explicit -Cr given, otherwise none gives RTE.
IMO, that's a bit of a problem. In 32bit, the overflow is detected just by enabling overflow checking whereas in 64bit, enabling overflow checking isn't enough even though it should be.
That makes the compiler's behavior inconsistent. In one case (32bit), the overflow is detected by enabling overflow checking and in the other case (64bit) the overflow is detected only by enabling a different check, specifically, range checking.
Overflow checking should be enough in either bitness. The inconsistency in 64bit is caused by the compiler unnecessarily promoting the 32bit integer to 64bit.
Thanks for testing the behavior on the trunk version.