From: Michał Kępień Date: Tue, 30 Jul 2019 19:08:40 +0000 (+0200) Subject: Include where necessary for musl libc X-Git-Tag: v9.11.10~14^2~8 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=5e9ac86c2b5ea8b6b43fd474d04534c32f01f228;p=thirdparty%2Fbind9.git Include where necessary for musl libc All unit tests define the UNIT_TESTING macro, which causes to replace malloc(), calloc(), realloc(), and free() with its own functions tracking memory allocations. In order for this not to break compilation, the system header declaring the prototypes for these standard functions must be included before . Normally, these prototypes are only present in , so we make sure it is included before . However, musl libc also defines the prototypes for calloc() and free() in , which is included by , which is included e.g. by . Thus, unit tests including "dnstest.h" (which includes , which includes ) after will not compile with musl libc as for these programs, will be included after . Always including after all other header files is not a feasible solution as that causes the mock assertion macros defined in to mangle the contents of , thus breaking compilation. We cannot really use the __noreturn__ or analyzer_noreturn attributes with cmocka assertion functions because they do return if the tested condition is true. The problem is that what BIND unit tests do is incompatible with Clang Static Analyzer's assumptions: since we use cmocka, our custom assertion handlers are present in a shared library (i.e. it is the cmocka library that checks the assertion condition, not a macro in unit test code). Redefining cmocka's assertion macros in is an ugly hack to overcome that problem - unfortunately, this is the only way we can think of to make Clang Static Analyzer properly process unit test code. Giving up on Clang Static Analyzer being able to properly process unit test code is not a satisfactory solution. Undefining _GNU_SOURCE for unit test code could work around the problem (musl libc's only defines the prototypes for calloc() and free() when _GNU_SOURCE is defined), but doing that could introduce discrepancies for unit tests including entire *.c files, so it is also not a good solution. All in all, including before for all affected unit tests seems to be the most benign way of working around this musl libc quirk. While quite an ugly solution, it achieves our goals here, which are to keep the benefit of proper static analysis of unit test code and to fix compilation against musl libc. (cherry picked from commit 59528d0e9d2ff5a9ed839e45272007bac73e64c4) --- diff --git a/lib/dns/tests/acl_test.c b/lib/dns/tests/acl_test.c index 3b6c338b2a7..ebd39c52d42 100644 --- a/lib/dns/tests/acl_test.c +++ b/lib/dns/tests/acl_test.c @@ -17,9 +17,10 @@ #include #include +#include /* IWYU pragma: keep */ #include -#include #include +#include #include #include diff --git a/lib/dns/tests/db_test.c b/lib/dns/tests/db_test.c index b5eb9ba67c0..35cf21d0f26 100644 --- a/lib/dns/tests/db_test.c +++ b/lib/dns/tests/db_test.c @@ -17,8 +17,9 @@ #include #include -#include +#include /* IWYU pragma: keep */ #include +#include #define UNIT_TESTING #include diff --git a/lib/dns/tests/dbdiff_test.c b/lib/dns/tests/dbdiff_test.c index 1c1c02ae4a8..e2759a39623 100644 --- a/lib/dns/tests/dbdiff_test.c +++ b/lib/dns/tests/dbdiff_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dbiterator_test.c b/lib/dns/tests/dbiterator_test.c index e514e6ba905..a3e9a5036e2 100644 --- a/lib/dns/tests/dbiterator_test.c +++ b/lib/dns/tests/dbiterator_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dbversion_test.c b/lib/dns/tests/dbversion_test.c index a72670ad649..a53249a6395 100644 --- a/lib/dns/tests/dbversion_test.c +++ b/lib/dns/tests/dbversion_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dh_test.c b/lib/dns/tests/dh_test.c index 4dbfd82fc44..da1f5e9a80a 100644 --- a/lib/dns/tests/dh_test.c +++ b/lib/dns/tests/dh_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dispatch_test.c b/lib/dns/tests/dispatch_test.c index de24567293d..ddc8bf16216 100644 --- a/lib/dns/tests/dispatch_test.c +++ b/lib/dns/tests/dispatch_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dnstap_test.c b/lib/dns/tests/dnstap_test.c index b470b7b4000..d12c094b749 100644 --- a/lib/dns/tests/dnstap_test.c +++ b/lib/dns/tests/dnstap_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/dnstest.c b/lib/dns/tests/dnstest.c index 4f49b30709e..25714cdd538 100644 --- a/lib/dns/tests/dnstest.c +++ b/lib/dns/tests/dnstest.c @@ -18,9 +18,10 @@ #include #include +#include /* IWYU pragma: keep */ #include -#include #include +#include #include #include diff --git a/lib/dns/tests/dst_test.c b/lib/dns/tests/dst_test.c index 6e2f734990c..7d563a603ad 100644 --- a/lib/dns/tests/dst_test.c +++ b/lib/dns/tests/dst_test.c @@ -17,8 +17,9 @@ #include #include -#include +#include /* IWYU pragma: keep */ #include +#include #include #define UNIT_TESTING diff --git a/lib/dns/tests/geoip_test.c b/lib/dns/tests/geoip_test.c index 3323945443b..d272502a970 100644 --- a/lib/dns/tests/geoip_test.c +++ b/lib/dns/tests/geoip_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/gost_test.c b/lib/dns/tests/gost_test.c index 27f928236d1..6c378145b9c 100644 --- a/lib/dns/tests/gost_test.c +++ b/lib/dns/tests/gost_test.c @@ -17,6 +17,7 @@ #include #include +#include #include #include #include diff --git a/lib/dns/tests/keytable_test.c b/lib/dns/tests/keytable_test.c index 6329daf1aab..18a7a560b1d 100644 --- a/lib/dns/tests/keytable_test.c +++ b/lib/dns/tests/keytable_test.c @@ -17,10 +17,11 @@ #include #include -#include +#include +#include /* IWYU pragma: keep */ #include #include -#include +#include #include #define UNIT_TESTING diff --git a/lib/dns/tests/master_test.c b/lib/dns/tests/master_test.c index 5d5f935f299..639a8e66ae3 100644 --- a/lib/dns/tests/master_test.c +++ b/lib/dns/tests/master_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/name_test.c b/lib/dns/tests/name_test.c index a4a9c9d9e0a..f04744d3b6e 100644 --- a/lib/dns/tests/name_test.c +++ b/lib/dns/tests/name_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/nsec3_test.c b/lib/dns/tests/nsec3_test.c index 636aa526fbd..289b65f2854 100644 --- a/lib/dns/tests/nsec3_test.c +++ b/lib/dns/tests/nsec3_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/peer_test.c b/lib/dns/tests/peer_test.c index c06c3b5e185..3e8f765fc20 100644 --- a/lib/dns/tests/peer_test.c +++ b/lib/dns/tests/peer_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/private_test.c b/lib/dns/tests/private_test.c index 699da9b1c92..0405511cc18 100644 --- a/lib/dns/tests/private_test.c +++ b/lib/dns/tests/private_test.c @@ -19,6 +19,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/rbt_serialize_test.c b/lib/dns/tests/rbt_serialize_test.c index 55202378e32..fc9f44860d3 100644 --- a/lib/dns/tests/rbt_serialize_test.c +++ b/lib/dns/tests/rbt_serialize_test.c @@ -18,11 +18,12 @@ #include #include -#include -#include #include -#include +#include +#include /* IWYU pragma: keep */ +#include #include +#include #define UNIT_TESTING #include diff --git a/lib/dns/tests/rbt_test.c b/lib/dns/tests/rbt_test.c index ad828ab0de2..ede9fec2359 100644 --- a/lib/dns/tests/rbt_test.c +++ b/lib/dns/tests/rbt_test.c @@ -20,6 +20,7 @@ #include #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/rdata_test.c b/lib/dns/tests/rdata_test.c index c51a1c7e57d..0023d25f425 100644 --- a/lib/dns/tests/rdata_test.c +++ b/lib/dns/tests/rdata_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/rdataset_test.c b/lib/dns/tests/rdataset_test.c index 670612cb1fc..7c810d1571f 100644 --- a/lib/dns/tests/rdataset_test.c +++ b/lib/dns/tests/rdataset_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/rdatasetstats_test.c b/lib/dns/tests/rdatasetstats_test.c index 4ebf5b81685..c9696087a53 100644 --- a/lib/dns/tests/rdatasetstats_test.c +++ b/lib/dns/tests/rdatasetstats_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/resolver_test.c b/lib/dns/tests/resolver_test.c index 7703b9ca6c0..051880913cb 100644 --- a/lib/dns/tests/resolver_test.c +++ b/lib/dns/tests/resolver_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include diff --git a/lib/dns/tests/rsa_test.c b/lib/dns/tests/rsa_test.c index 16214c67930..f9ac6d0435e 100644 --- a/lib/dns/tests/rsa_test.c +++ b/lib/dns/tests/rsa_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/sigs_test.c b/lib/dns/tests/sigs_test.c index 9ccec9cad6c..62864fc8fdd 100644 --- a/lib/dns/tests/sigs_test.c +++ b/lib/dns/tests/sigs_test.c @@ -19,8 +19,9 @@ #include #if defined(OPENSSL) || defined(PKCS11CRYPTO) -#include +#include /* IWYU pragma: keep */ #include +#include #include #define UNIT_TESTING diff --git a/lib/dns/tests/time_test.c b/lib/dns/tests/time_test.c index b148bd8a2c2..e0293eca87b 100644 --- a/lib/dns/tests/time_test.c +++ b/lib/dns/tests/time_test.c @@ -18,9 +18,10 @@ #include #include -#include -#include #include +#include /* IWYU pragma: keep */ +#include +#include #include #define UNIT_TESTING diff --git a/lib/dns/tests/tsig_test.c b/lib/dns/tests/tsig_test.c index 8e5250e72a1..11d011aa9a5 100644 --- a/lib/dns/tests/tsig_test.c +++ b/lib/dns/tests/tsig_test.c @@ -17,8 +17,9 @@ #include #include -#include +#include /* IWYU pragma: keep */ #include +#include #include #define UNIT_TESTING diff --git a/lib/dns/tests/update_test.c b/lib/dns/tests/update_test.c index 86638cb49fb..4cf6f8f601f 100644 --- a/lib/dns/tests/update_test.c +++ b/lib/dns/tests/update_test.c @@ -18,11 +18,12 @@ #include #include -#include -#include #include -#include +#include /* IWYU pragma: keep */ +#include +#include #include +#include #define UNIT_TESTING #include diff --git a/lib/dns/tests/zonemgr_test.c b/lib/dns/tests/zonemgr_test.c index 3e8eacf4ac1..4cc5aa2d4cf 100644 --- a/lib/dns/tests/zonemgr_test.c +++ b/lib/dns/tests/zonemgr_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/dns/tests/zt_test.c b/lib/dns/tests/zt_test.c index 4c9ffe656e1..f183c0f0ea7 100644 --- a/lib/dns/tests/zt_test.c +++ b/lib/dns/tests/zt_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/irs/tests/resconf_test.c b/lib/irs/tests/resconf_test.c index 2cd7d73c70b..8342a92321c 100644 --- a/lib/irs/tests/resconf_test.c +++ b/lib/irs/tests/resconf_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/atomic_test.c b/lib/isc/tests/atomic_test.c index 120f86a683c..1244512e176 100644 --- a/lib/isc/tests/atomic_test.c +++ b/lib/isc/tests/atomic_test.c @@ -21,6 +21,7 @@ #define UNIT_TESTING #include +#include #include #include diff --git a/lib/isc/tests/buffer_test.c b/lib/isc/tests/buffer_test.c index b85870c9d83..690e533bf4a 100644 --- a/lib/isc/tests/buffer_test.c +++ b/lib/isc/tests/buffer_test.c @@ -19,6 +19,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/counter_test.c b/lib/isc/tests/counter_test.c index d70d8ee0d15..d606a9704dd 100644 --- a/lib/isc/tests/counter_test.c +++ b/lib/isc/tests/counter_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include diff --git a/lib/isc/tests/errno_test.c b/lib/isc/tests/errno_test.c index 6c1ccfe084f..761d243784f 100644 --- a/lib/isc/tests/errno_test.c +++ b/lib/isc/tests/errno_test.c @@ -18,6 +18,7 @@ #include #include +#include #include #include diff --git a/lib/isc/tests/heap_test.c b/lib/isc/tests/heap_test.c index 3520901b914..a3898852677 100644 --- a/lib/isc/tests/heap_test.c +++ b/lib/isc/tests/heap_test.c @@ -19,10 +19,11 @@ #include #include +#include /* IWYU pragma: keep */ #include -#include #include #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/ht_test.c b/lib/isc/tests/ht_test.c index 7f7afee0ebf..f8998a8460a 100644 --- a/lib/isc/tests/ht_test.c +++ b/lib/isc/tests/ht_test.c @@ -18,6 +18,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/lex_test.c b/lib/isc/tests/lex_test.c index bd0c62c713c..8c793617093 100644 --- a/lib/isc/tests/lex_test.c +++ b/lib/isc/tests/lex_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/mem_test.c b/lib/isc/tests/mem_test.c index f279a024470..f56f385557a 100644 --- a/lib/isc/tests/mem_test.c +++ b/lib/isc/tests/mem_test.c @@ -17,9 +17,10 @@ #include #include +#include +#include /* IWYU pragma: keep */ #include #include -#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/parse_test.c b/lib/isc/tests/parse_test.c index dd6533c1c39..9b2a3ac06b9 100644 --- a/lib/isc/tests/parse_test.c +++ b/lib/isc/tests/parse_test.c @@ -19,11 +19,12 @@ #include #include +#include +#include /* IWYU pragma: keep */ #include #include -#include -#include #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/pool_test.c b/lib/isc/tests/pool_test.c index 69f8003eb44..a9ef7397463 100644 --- a/lib/isc/tests/pool_test.c +++ b/lib/isc/tests/pool_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/queue_test.c b/lib/isc/tests/queue_test.c index 45b56be7cf8..21ed8851b78 100644 --- a/lib/isc/tests/queue_test.c +++ b/lib/isc/tests/queue_test.c @@ -17,10 +17,11 @@ #include #include +#include /* IWYU pragma: keep */ #include #include -#include #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/radix_test.c b/lib/isc/tests/radix_test.c index bbe462c6c56..c7300a02d63 100644 --- a/lib/isc/tests/radix_test.c +++ b/lib/isc/tests/radix_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include diff --git a/lib/isc/tests/random_test.c b/lib/isc/tests/random_test.c index 228e300c9d2..9fdfd7ec2c5 100644 --- a/lib/isc/tests/random_test.c +++ b/lib/isc/tests/random_test.c @@ -26,6 +26,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/safe_test.c b/lib/isc/tests/safe_test.c index 5775b6ed7b7..266ac7527d2 100644 --- a/lib/isc/tests/safe_test.c +++ b/lib/isc/tests/safe_test.c @@ -19,8 +19,9 @@ #include #include -#include +#include /* IWYU pragma: keep */ #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/sockaddr_test.c b/lib/isc/tests/sockaddr_test.c index c1b2beb424a..23df3cfb03f 100644 --- a/lib/isc/tests/sockaddr_test.c +++ b/lib/isc/tests/sockaddr_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/socket_test.c b/lib/isc/tests/socket_test.c index 4766d697f27..3827fac20f4 100644 --- a/lib/isc/tests/socket_test.c +++ b/lib/isc/tests/socket_test.c @@ -18,10 +18,11 @@ #include #include +#include /* IWYU pragma: keep */ #include #include -#include #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/symtab_test.c b/lib/isc/tests/symtab_test.c index 3503952251b..9b26d6a82b8 100644 --- a/lib/isc/tests/symtab_test.c +++ b/lib/isc/tests/symtab_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/task_test.c b/lib/isc/tests/task_test.c index 4406cd621e2..92c199f2f63 100644 --- a/lib/isc/tests/task_test.c +++ b/lib/isc/tests/task_test.c @@ -17,11 +17,12 @@ #include #include +#include +#include /* IWYU pragma: keep */ #include #include -#include -#include #include +#include #define UNIT_TESTING #include diff --git a/lib/isc/tests/taskpool_test.c b/lib/isc/tests/taskpool_test.c index 123d2cc3617..b4cc549bfbc 100644 --- a/lib/isc/tests/taskpool_test.c +++ b/lib/isc/tests/taskpool_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/time_test.c b/lib/isc/tests/time_test.c index e03548c9285..5ff41ce441a 100644 --- a/lib/isc/tests/time_test.c +++ b/lib/isc/tests/time_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isc/tests/timer_test.c b/lib/isc/tests/timer_test.c index 5e780b771ca..c53c4ca8325 100644 --- a/lib/isc/tests/timer_test.c +++ b/lib/isc/tests/timer_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include diff --git a/lib/isccfg/tests/parser_test.c b/lib/isccfg/tests/parser_test.c index 16dfef4106e..6609ea6a80e 100644 --- a/lib/isccfg/tests/parser_test.c +++ b/lib/isccfg/tests/parser_test.c @@ -17,6 +17,7 @@ #include #include +#include /* IWYU pragma: keep */ #include #include #include