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