From a37a2763383e6c204fe878e1416dd35e7711d3a9 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 26 Sep 2023 15:00:43 +0300 Subject: Build: Fix __attribute__((ifunc(...))) detection with clang -Wall. Now if user-supplied CFLAGS contains -Wall -Wextra -Wpedantic the two checks that need -Werror will still work. At CMake side there is add_compile_options(-Wall -Wextra) but it didn't affect the -Werror tests. So with both Autotools and CMake only user-supplied CFLAGS could make the checks fail when they shouldn't. This is not a full fix as things like -Wunused-macros in user-supplied CFLAGS will still cause problems with both GCC and Clang. --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 9baa314e..c8d52f2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -790,6 +790,14 @@ if(ALLOW_ATTR_IFUNC) void func_ifunc(void) __attribute__((__ifunc__(\"resolve_func\"))); int main(void) { return 0; } + /* + * 'clang -Wall' incorrectly warns that resolve_func is + * unused (-Wunused-function). Correct assembly output is + * still produced. This problem exists at least in Clang + * versions 4 to 17. The following silences the bogus warning: + */ + void make_clang_quiet(void); + void make_clang_quiet(void) { resolve_func()(); } " HAVE_FUNC_ATTRIBUTE_IFUNC) cmake_pop_check_state() -- cgit v1.2.3