[systemd-devel] [PATCH 2/2] macro: allow assert_se() assertions to also be optimized out when NDEBUG is set
Lennart Poettering
lennart at poettering.net
Thu Mar 26 01:19:44 PDT 2015
On Tue, 24.03.15 11:11, Shawn Landden (shawn at churchofgit.com) wrote:
> Will result in slightly smaller binaries, and cuts out the branch, even if
> the expression is still executed.
I am sorry, but the whole point of assert_se() is that it has side
effects. That's why it is called that way (the "se" suffix stands for
"side effects"), and is different from assert(). You are supposed to
use it whenever the code enclosed in it shall not be suppressed if
NDEBUG is defined. This patch of yours breaks that whole logic!
Lennart
> ---
> src/shared/macro.h | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/shared/macro.h b/src/shared/macro.h
> index 7f89951..02219ea 100644
> --- a/src/shared/macro.h
> +++ b/src/shared/macro.h
> @@ -212,17 +212,17 @@ static inline unsigned long ALIGN_POWER2(unsigned long u) {
> (__x / __y + !!(__x % __y)); \
> })
>
> -#define assert_se(expr) \
> - do { \
> - if (_unlikely_(!(expr))) \
> - log_assert_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
> - } while (false) \
> -
> /* We override the glibc assert() here. */
> #undef assert
> #ifdef NDEBUG
> +#define assert_se(expr) do {expr} while(false)
> #define assert(expr) do {} while(false)
> #else
> +#define assert_se(expr) \
> + do { \
> + if (_unlikely_(!(expr))) \
> + log_assert_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
> + } while (false)
> #define assert(expr) assert_se(expr)
> #endif
>
> --
> 2.2.1.209.g41e5f3a
>
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list