Integer overflow and underflow semantics?

Artur Skawina via Digitalmars-d digitalmars-d at puremagic.com
Mon Jul 21 14:10:31 PDT 2014


On 07/21/14 21:53, via Digitalmars-d wrote:
> On Monday, 21 July 2014 at 19:33:32 UTC, Artur Skawina via Digitalmars-d wrote:
>> Disallowing integer overflow just at CT is not (sanely) possible
>> in a language with D's CTFE capabilities. (Would result in code
>> that compiles and works at runtime, but is not ctfe-able)
> 
> I'd like to see compile time _constants_ be unbounded rational numbers with explicit truncation. It is when you assign it to an in-memory location that you need to worry about bounds. The same goes for calculations that doesn't do division.
> 
> No need to copy the bad parts of C.

Actually, C/C++ could get away with treating overflow during constant
folding as an error (or at least emitting a warning) because of the
lack of CTFE (and no templates in C's case). The code will either
compile or it won't.
For D that is not possible -- if an expression is valid at run-time
then it should be valid at compile-time (and obviously yield the same
value). Making this aspect of CT evaluation special would make CTFE
much less useful and add complexity to the language for very little gain.
Trying to handle just a subset of the problem would make things even
worse -- /some/ code would not be CTFE-able and /some/ overflows wouldn't
be caught.

   int f(int a, int b) { return a*b; }
   enum v = f(100_000, 100_000);

artur


More information about the Digitalmars-d mailing list