checkedint call removal

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 30 15:28:46 PDT 2014


On 07/30/2014 11:39 PM, Walter Bright wrote:
> On 7/30/2014 2:21 PM, Timon Gehr wrote:
>> Because the compiler does not seem know that 'assert' never returns,
>> they shove
>> in an __assume after it.
>
> The critical bit of misunderstanding here is the C standard *requires*
> that assert be implemented as a macro,

There is no such misunderstanding. I know this.

> and that NDEBUG will totally disable it.

The example implementation based on NDEBUG there does not provide this, 
rather, NDEBUG leaves the optimizer hint in.

> Microsoft needed to add a builtin feature so that the
> correct assert semantics can be reliably obtained by the optimizer.
> ...

What makes the second implementation with both assert and __assume there 
'correct'? Does the C standard specify undefined behaviour if the assert 
expression has side-effects?

> It's a mistake to infer from that that assert and assume are different.

I don't need to rely on the MSVC++ compiler to see this. (But the 
__assume they have can be used to pass hints to the optimizer even if it 
does not happen in the context of an assertion, which I think was 
bearophile's point.)


More information about the Digitalmars-d mailing list