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