Counter intuitively, asserts hurt gcc static dataflow analysis.

John Carter john.carter@taitradio.com
Sun May 13 22:12:00 GMT 2018


> With an assert() modified to give compile-time warnings when possible,
you will generally have run-time costs.

Hmm. Not true,  the __builtin_choose_expr( __builtin_constant_p(exp))
completely vanishes at run time in optimized code.

The only downsides are....
 * it does something slightly different to the posix standard. Hence
probably should have a slightly different name.
* it's a gcc extension (but seems to work well with clang)
* it doesn't work with C++



On Fri, May 11, 2018 at 6:21 PM, David Brown <david@westcontrol.com> wrote:

>
>
> On 10/05/18 00:30, John Carter wrote:
>
> It catches things that can be inlined but seen as constant at comile time.
>>
>> I think as gcc's optimizer get's smarter this will be quite a win.
>>
>> It also basically subsumes static_assert()
>>
>
> This does not replace static_assert.  The key point about static_assert is
> that it is /always/ static - zero cost at run-time or code size.  You know
> that is the case when you write it, and other people reading the code know
> that.  So static_asserts are always free, and can be used liberally.  With
> an assert() modified to give compile-time warnings when possible, you will
> generally have run-time costs.
>
>
>
>


-- 
John Carter
Phone : (64)(3) 358 6639
Tait Electronics
PO Box 1645 Christchurch
New Zealand

-- 
This Communication is Confidential. We only send and receive email on the

basis of the terms set out at www.taitradio.com/email_disclaimer 
<http://www.taitradio.com/email_disclaimer>



More information about the Gcc-help mailing list