AC_COMPILE_IFELSE needed -Werror because Clang <= 14 would merely
warn about the unsupported attribute and implicit function declaration.
Changing to AC_LINK_IFELSE handles the implicit declaration because
the symbol __crc32d is unlikely to exist in libc.
Note that the other part of the check is that #include <arm_acle.h>
must work. If the header is missing, most compilers give an error
and the linking step won't be attempted.
Avoiding -Werror makes the check more robust in case CFLAGS contains
warning flags that break -Werror anyway (but this isn't the only check
in configure.ac that has this problem). Using AC_LINK_IFELSE also makes
the check more similar to how it is done in CMakeLists.txt.
(cherry picked from commit
35eb57355ad1c415a838d26192d5af84abb7cf39)
AS_IF([test "x$enable_arm64_crc32" = xno], [
AC_MSG_RESULT([no, --disable-arm64-crc32 was used])
], [
- # Set -Werror here because some versions of Clang (14 and older)
- # do not report the unsupported __attribute__((__target__("+crc")))
- # or __crc32d() as an error, only as a warning. This does not need
- # to be done with CMake because tests will attempt to link and the
- # error will be reported then.
- OLD_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Werror"
-
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <arm_acle.h>
#include <stdint.h>
enable_arm64_crc32=no
])
AC_MSG_RESULT([$enable_arm64_crc32])
-
- CFLAGS="$OLD_CFLAGS"
])
# Check for ARM64 CRC32 instruction runtime detection.