Compiling bdb with clang-16 on aarch64 (hardware) currently fails:
0make -C depends/ bdb CC=clang CXX=clang++
1...
2checking for mutexes... UNIX/fcntl
3configure: WARNING: NO SHARED LATCH IMPLEMENTATION FOUND FOR THIS PLATFORM.
4configure: error: Unable to find a mutex implementation
Looking at config.log we’ve got:
0configure:18704: checking for mutexes
1configure:18815: clang -o conftest -pipe -std=c11 -O2 -Wno-error=implicit-function-declaration -Wno-error=format-security -I/bitcoin/depends/aarch64-unknown-linux-gnu/include -D_GNU_SOURCE -D_REENTRANT -L/bitcoin/depends/aarch64-unknown-linux-gnu/lib conftest.c -lpthread >&5
2conftest.c:45:1: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
3main() {
4^
5int
6conftest.c:50:2: warning: call to undeclared library function 'exit' with type 'void (int) __attribute__((noreturn))'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
7 exit (
8 ^
9conftest.c:50:2: note: include the header <stdlib.h> or explicitly provide a declaration for 'exit'
101 warning and 1 error generated.
Clang-16 changed -Wimplicit-function-declaration
and -Wimplicit-int
warnings into errors, see:
https://releases.llvm.org/16.0.0/tools/clang/docs/ReleaseNotes.html#potentially-breaking-changes.
The -Wimplicit-function-declaration and -Wimplicit-int warnings now default to an error in C99, C11, and C17. As of C2x, support for implicit function declarations and implicit int has been removed, and the warning options will have no effect. Specifying -Wimplicit-int in C89 mode will now issue warnings instead of being a noop.