From a98de38d4cea4c0ca4ed9a405a8235e730ded42d Mon Sep 17 00:00:00 2001 From: Ryan Gonzalez <ryan.gonzalez@collabora.com> Date: Fri, 21 Feb 2025 16:59:23 -0600 Subject: [PATCH] build: Disable -fsanitize=function when building with UBSan LLVM 17 enabled -fsanitize=function by default for C, instead of only C++: https://github.com/llvm/llvm-project/commit/279a4d0d67c874e80c171666822f2fabdd6fa926 But GLib uses function pointer casts extensively, resulting in a myriad of test failures. Just disable it as a workaround. steamrt/tasks#677 Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com> --- meson.build | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/meson.build b/meson.build index 7660073c..b149a06f 100644 --- a/meson.build +++ b/meson.build @@ -219,6 +219,15 @@ else no_leak_sanitizer = ['b_sanitize=none'] endif +# GLib explicitly requires being able to call functions through a different +# function pointer type, which trips UBSan's -fsanitize=function: +# https://gitlab.gnome.org/GNOME/glib/-/blob/53b0ba327ba52ebcd38ee4e7f479bf029ffcdc1f/docs/toolchain-requirements.md#calling-functions-through-differently-typed-function-pointers +if enabled_sanitizers.contains('undefined') + add_project_arguments( + c_compiler.get_supported_arguments('-fno-sanitize=function'), + language : 'c') +endif + add_project_link_arguments( c_compiler.get_supported_link_arguments( '-Wl,-z,origin', -- GitLab