From 32b0a3ce19224f9074d01a4ffbc1655b05fcb82d Mon Sep 17 00:00:00 2001 From: Jia Tan Date: Fri, 23 Feb 2024 16:12:32 +0800 Subject: [PATCH] Build: Fix ARM64 CRC32 instruction feature test. Old versions of Clang reported the unsupported function attribute and __crc32d() function as warnings instead of errors, so the feature test passed when it shouldn't have, causing a compile error at build time. -Werror was added to this feature test to fix this. The change is not needed for CMake because check_c_source_compiles() also performs linking and the error is caught then. Thanks to Sebastian Andrzej Siewior for reporting this. --- configure.ac | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/configure.ac b/configure.ac index 36ceeef3..4476c8b4 100644 --- a/configure.ac +++ b/configure.ac @@ -1104,6 +1104,14 @@ AC_MSG_CHECKING([if ARM64 CRC32 instruction is usable]) 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([[ #include #include @@ -1124,6 +1132,8 @@ uint32_t my_crc(uint32_t a, uint64_t b) enable_arm64_crc32=no ]) AC_MSG_RESULT([$enable_arm64_crc32]) + + CFLAGS="$OLD_CFLAGS" ]) # Check for ARM64 CRC32 instruction runtime detection.