On Tue, 26 Mar 2013 14:20:30 -0400, bearophile <[email protected]> wrote:

Steven Schveighoffer:

If we treated it as an error, then it would be very costly to implement, every operation would have to check for overflow.

I have used similar tests and it's not very costly, not significantly more costly than array bound tests.

Array bounds tests are removed for release code. And an array bounds test is unequivocally an error.

In many cases, overflowing integers are not a problem, easily proven not to occur, or are expected. Such designs would have to fight the compiler to get efficient code if the compiler insisted on checking overflows and possibly throwing errors.


In the meantime Clang has introduced similar run-time tests for C/C++ code. So C/C++ are now better (more modern, safer) than the D language/official compiler in this regard.

(And Issue 4835 is about compile-time constants. CFFE is already plenty slow, mostly because of memory allocations. Detecting overflow in constants is not going to significantly slow down compilation, and it has no effect on the runtime. Even GCC 4.3.4 performs such compile-time tests.)

If CTFE did something different than real code, that would be a problem. Again, you should be able to construct the needed types with a struct, to use in both CTFE and real code.


The CPU does not assist in this.

The X86 CPUs have overflow and carry flags that help.

What I mean is the cost is not free.  Like null pointer checks are free.

For code that is specifically designed to be very fast and is properly designed not to experience overflow, it would be needlessly penalized.

The simple for loop:

for(int i = 0; i < 10; ++i)

would now have to deal with uselessly checking i for overflow. This could add up quickly.

-Steve

Reply via email to