From ca22505c8ca02950385f523e6056a9e129cf2289 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Thu, 9 Nov 2023 20:44:30 +0100 Subject: [PATCH] Disable -fsanitize=function on Clang 17 Closes GH-12642 --- configure.ac | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/configure.ac b/configure.ac index 76f3368274fdf..dd3464216108f 100644 --- a/configure.ac +++ b/configure.ac @@ -1581,6 +1581,23 @@ if test "$PHP_UNDEFINED_SANITIZER" = "yes"; then CFLAGS="$CFLAGS -fno-sanitize=object-size" CXXFLAGS="$CFLAGS -fno-sanitize=object-size" ]) + + dnl Clang 17 adds stricter function pointer compatibility checks where pointer args cannot be + dnl cast to void*. In that case, set -fno-sanitize=function. + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-sanitize-recover=undefined" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +void foo(char *string) {} +int main(void) { + void (*f)(void *) = (void (*)(void *))foo; + f("foo"); +} + ]])],,[ubsan_needs_no_function=yes],) + CFLAGS="$OLD_CFLAGS" + if test "$ubsan_needs_no_function" = yes; then + CFLAGS="$CFLAGS -fno-sanitize=function" + CXXFLAGS="$CFLAGS -fno-sanitize=function" + fi ], [AC_MSG_ERROR([UndefinedBehaviorSanitizer is not available])]) fi