X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fassert.h;h=f6a2ed60ae9da3180575a04245a8e1bbdcc3dbe8;hb=98b15851a941e7342b8bb19e265cdc3a40fabfb8;hp=e24231a96c9aee70b88ca05549f524d88d706e99;hpb=91d8147391efdc4d42cc4e1c171a65c0372a008f;p=babeltrace.git diff --git a/src/common/assert.h b/src/common/assert.h index e24231a9..f6a2ed60 100644 --- a/src/common/assert.h +++ b/src/common/assert.h @@ -2,8 +2,8 @@ #define BABELTRACE_ASSERT_INTERNAL_H /* - * Copyright (c) 2018 EfficiOS Inc. and Linux Foundation - * Copyright (c) 2018 Philippe Proulx + * Copyright (c) 2018-2019 EfficiOS Inc. and Linux Foundation + * Copyright (c) 2018-2019 Philippe Proulx * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,15 +29,17 @@ #include "common/macros.h" -#ifdef BT_DEBUG_MODE - extern void bt_common_assert_failed(const char *file, int line, - const char *func, const char *assertion) __attribute__((noreturn)); + const char *func, const char *assertion) + __attribute__((noreturn)); /* * Internal assertion (to detect logic errors on which the library user - * has no influence). Use BT_ASSERT_PRE() to check a precondition which - * must be directly or indirectly satisfied by the library user. + * has no influence). Use BT_ASSERT_PRE*() or BT_ASSERT_POST*() to check + * preconditions or postconditions which must be directly or indirectly + * satisfied by the library user. + * + * BT_ASSERT() is enabled in both debug and non-debug modes. */ #define BT_ASSERT(_cond) \ do { \ @@ -50,20 +52,36 @@ extern void bt_common_assert_failed(const char *file, int line, /* * Marks a function as being only used within a BT_ASSERT() context. */ -# define BT_ASSERT_FUNC -#else +#define BT_ASSERT_FUNC + +#ifdef BT_DEBUG_MODE + +/* + * Debug mode internal assertion. + */ +#define BT_ASSERT_DBG(_cond) BT_ASSERT(_cond) + /* - * When BT_DEBUG_MODE is not defined, define BT_ASSERT() macro to the following - * to trick the compiler into thinking that the variable passed as condition to - * the assertion is used. This is to prevent set-but-not-used warnings from the - * compiler when assertions are disabled. The `sizeof` operator also makes sure - * that the `_cond` expression is not evaluated, thus preventing unwanted side - * effects. + * Marks a function as being only used within a BT_ASSERT_DBG() context. + */ +#define BT_ASSERT_DBG_FUNC + +#else /* BT_DEBUG_MODE */ + +/* + * When `BT_DEBUG_MODE` is _not_ defined, define BT_ASSERT_DBG() macro + * to the following to trick the compiler into thinking that the + * variable passed as condition to the assertion is used. This is to + * prevent set-but-not-used warnings from the compiler when assertions + * are disabled. The sizeof() operator also makes sure that the `_cond` + * expression is not evaluated, thus preventing unwanted side effects. * - * In-depth explanation: https://stackoverflow.com/questions/37411809/how-to-elegantly-fix-this-unused-variable-warning/37412551#37412551 + * In-depth explanation: + * https://stackoverflow.com/questions/37411809/how-to-elegantly-fix-this-unused-variable-warning/37412551#37412551 */ -# define BT_ASSERT(_cond) ((void) sizeof((void) (_cond), 0)) -# define BT_ASSERT_FUNC __attribute__((unused)) +# define BT_ASSERT_DBG(_cond) ((void) sizeof((void) (_cond), 0)) +# define BT_ASSERT_DBG_FUNC __attribute__((unused)) + #endif /* BT_DEBUG_MODE */ #endif /* BABELTRACE_ASSERT_INTERNAL_H */