Integer overflow and underflow semantics?

Don via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 23 00:16:25 PDT 2014


On Monday, 21 July 2014 at 21:10:43 UTC, Artur Skawina via 
Digitalmars-d wrote:
> 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

Why do you think that? There are many cases where that is not 
true. Comparing pointers to two unrelated objects will work at 
runtime, but causes an error in CTFE. You can read global 
variables at runtime, not in CTFE. Etc.

The converse is true, though -- if it works at CTFE, it must work 
at runtime.


Disallowing integer overflow in CTFE could certainly be 
implemented. It's not a difficult experiment to run. It would be 
interesting to see how many instances of overflow are bugs, and 
how many are intentional.



More information about the Digitalmars-d mailing list