checkedint call removal

via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 31 03:14:05 PDT 2014


On Thursday, 31 July 2014 at 08:23:44 UTC, Daniel Murphy wrote:
> "Daniel Murphy"  wrote in message 
> news:lrct2d$1me8$1 at digitalmars.com...
>
>> > Wait, what? I thought the whole point of enforce is that it 
>> > will *not*
>> > be removed by the compiler, no matter what?
>>
>> No, the compiler is free to remove it if it can prove it will 
>> never be triggered.  eg if the condition is checking a ubyte < 
>> 1000.  If the assert in that example is never false, then the 
>> enforce is dead code.
>
> Actually, thinking about this some more...
>
> In this program the enforce can be removed
>
> assert(x < y);
> enforce(x < y);
>
> But not in this one:
>
> enforce(x < y);
> assert(x < y);
>
> because the compiler does need to take control flow into 
> account when applying the information in the assert.  In this 
> case the assert does not actually give the compiler any new 
> information.

No, if assert means "I promise that x < y where assert() is 
called", then "x < y" also holds when "enforce()" is called, 
because x and y cannot have changed between the two calls.


More information about the Digitalmars-d mailing list