From cb913177ae744c729717aa29ae54aa8656c9737e Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 20 Feb 2019 11:13:17 +1100 Subject: [PATCH] improve clang / cmocka integration --- lib/dns/tests/result_test.c | 1 + lib/isc/include/isc/util.h | 21 ++++++++++++++++----- lib/isc/tests/netaddr_test.c | 1 + lib/isc/tests/result_test.c | 1 + lib/isccc/tests/result_test.c | 1 + 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/dns/tests/result_test.c b/lib/dns/tests/result_test.c index 14d583f2ec..517bad381e 100644 --- a/lib/dns/tests/result_test.c +++ b/lib/dns/tests/result_test.c @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h index ed55e05727..b16b024e74 100644 --- a/lib/isc/include/isc/util.h +++ b/lib/isc/include/isc/util.h @@ -197,15 +197,26 @@ #ifdef UNIT_TESTING extern void mock_assert(const int result, const char* const expression, const char * const file, const int line); +/* + * Allow clang to determine that the following code is not reached + * by calling abort() if the condition fails. The abort() will + * never be executed as mock_assert() and _assert_true() longjmp + * or exit if the condition is false. + */ #define REQUIRE(expression) \ - mock_assert((int)(expression), #expression, __FILE__, __LINE__) + ((!(expression)) ? \ + (mock_assert(0, #expression, __FILE__, __LINE__), abort()) : (void)0) #define ENSURE(expression) \ - mock_assert((int)(expression), #expression, __FILE__, __LINE__) + ((!(int)(expression)) ? \ + (mock_assert(0, #expression, __FILE__, __LINE__), abort()) : (void)0) #define INSIST(expression) \ - mock_assert((int)(expression), #expression, __FILE__, __LINE__) + ((!(expression)) ? \ + (mock_assert(0, #expression, __FILE__, __LINE__), abort()) : (void)0) #define INVARIANT(expression) \ - mock_assert((int)(expression), #expression, __FILE__, __LINE__) - + ((!(expression)) ? \ + (mock_assert(0, #expression, __FILE__, __LINE__), abort()) : (void)0) +#define _assert_true(c, e, f, l) \ + ((c) ? (void)0 : (_assert_true(0, e, f, l), abort())) #else /* UNIT_TESTING */ /* * Assertions diff --git a/lib/isc/tests/netaddr_test.c b/lib/isc/tests/netaddr_test.c index 875d501e18..7b5920b6ab 100644 --- a/lib/isc/tests/netaddr_test.c +++ b/lib/isc/tests/netaddr_test.c @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/lib/isc/tests/result_test.c b/lib/isc/tests/result_test.c index 38fe12491f..39f972b82c 100644 --- a/lib/isc/tests/result_test.c +++ b/lib/isc/tests/result_test.c @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/lib/isccc/tests/result_test.c b/lib/isccc/tests/result_test.c index 1f29d0121d..a92331423a 100644 --- a/lib/isccc/tests/result_test.c +++ b/lib/isccc/tests/result_test.c @@ -15,6 +15,7 @@ #include #include +#include #include #include