This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
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
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |