From 2671666ef864f70ff363fee2c97daaa77f0da8bc 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 (cherry picked from commit cb913177ae744c729717aa29ae54aa8656c9737e) --- lib/dns/tests/result_test.c | 1 + lib/isc/include/isc/util.h | 21 ++++++++++++++++----- lib/isc/inet_ntop.c | 1 + lib/isc/tests/inet_ntop_test.c | 1 + lib/isc/tests/netaddr_test.c | 1 + lib/isc/tests/result_test.c | 1 + lib/isccc/tests/result_test.c | 1 + 7 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/dns/tests/result_test.c b/lib/dns/tests/result_test.c index c78b7e5420..3137fbfc4b 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 61ebb9190a..f358dbf4f3 100644 --- a/lib/isc/include/isc/util.h +++ b/lib/isc/include/isc/util.h @@ -220,15 +220,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/inet_ntop.c b/lib/isc/inet_ntop.c index fb06f850fd..60280c43ea 100644 --- a/lib/isc/inet_ntop.c +++ b/lib/isc/inet_ntop.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/lib/isc/tests/inet_ntop_test.c b/lib/isc/tests/inet_ntop_test.c index d2959055df..baf99a0932 100644 --- a/lib/isc/tests/inet_ntop_test.c +++ b/lib/isc/tests/inet_ntop_test.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #define UNIT_TESTING diff --git a/lib/isc/tests/netaddr_test.c b/lib/isc/tests/netaddr_test.c index 8465ca0880..b8e9d13e72 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 ea6dc71142..ff2a7b264c 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 1eae03ef72..c0e70f7403 100644 --- a/lib/isccc/tests/result_test.c +++ b/lib/isccc/tests/result_test.c @@ -15,6 +15,7 @@ #include #include +#include #include #include