fix build errors with -DNDEBUG

Martin Sebor msebor@gmail.com
Tue Jul 28 02:15:00 GMT 2015


On 07/27/2015 12:25 AM, Paul Eggert wrote:
> Martin Sebor wrote:
>> When glibc is compiled with -NDEBUG the
>> macros expand to nothing and, without the attribute or some
>> similar annotation, GCC complains about the variables being
>> unused.
>
> That's a common problem with assert and NDEBUG.  We solve this problem
> in a different way in the Emacs source code, with something like this:
>
> #ifdef ENABLE_CHECKING
> # define eassert(cond) ((cond) ? (void) 0 : die (#cond, __FILE__,
> __LINE__))
> #else
> # define eassert(cond) ((void) (0 && (cond)))
> #endif
>
> That way, GCC doesn't complain when assertions are disabled, because the
> variables are "used" even when !ENABLE_CHECKING.  Perhaps glibc could
> use a similar idea in a private macro after 2.22 is released.
> (Obviously standard 'assert' can't work this way.)

Thanks, that sounds like a good suggestion for a followup patch.

You're unfortunately right that standard assert can't use this
trick. It would have been better to specify that assert doesn't
evaluate its argument when NDEBUG is defined than specifying
the implementation. But it's far too late to change that.

Martin



More information about the Libc-alpha mailing list