checkedint call removal

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


On Thursday, 31 July 2014 at 10:14:06 UTC, Marc Schütz wrote:
> 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.

Ok, I take that back.

http://forum.dlang.org/thread/jrxrmcmeksxwlyuitzqp@forum.dlang.org?page=26#post-wzzayaevjsulxyuhlxzh:40forum.dlang.org


More information about the Digitalmars-d mailing list