diff -r a726281c809f -r 802ab24f67aa configure --- a/configure Tue Dec 23 10:00:02 2025 +0100 +++ b/configure Tue Dec 23 10:14:13 2025 +0100 @@ -156,6 +156,7 @@ --enable-api-docs run Doxygen during build --enable-coverage test coverage with gcov --enable-asan address sanitizer + --enable-ubsan undefined behavior sanitizer --disable-cxx-tests the check-cxx makefile target --disable-szmul-builtin use custom implementation, instead --disable-memrchr @@ -306,6 +307,8 @@ "--disable-coverage") unset FEATURE_COVERAGE ;; "--enable-asan") FEATURE_ASAN=on ;; "--disable-asan") unset FEATURE_ASAN ;; + "--enable-ubsan") FEATURE_UBSAN=on ;; + "--disable-ubsan") unset FEATURE_UBSAN ;; "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;; "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;; "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;; @@ -594,6 +597,26 @@ dep_checked_no_coverage=1 return 0 } +dependency_error_ubsan() +{ + print_check_msg "$dep_checked_ubsan" "checking for ubsan... " + # dependency ubsan toolchain="gnuc" + while true + do + if notistoolchain "gnuc"; then + break + fi + TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined" + TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined" + print_check_msg "$dep_checked_ubsan" "yes\n" + dep_checked_ubsan=1 + return 1 + done + + print_check_msg "$dep_checked_ubsan" "no\n" + dep_checked_ubsan=1 + return 0 +} dependency_error_qsort_r() { print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... " @@ -826,6 +849,26 @@ else : fi +if [ -n "$FEATURE_UBSAN" ]; then + # check dependency + if dependency_error_ubsan ; then + # "auto" features can fail and are just disabled in this case + if [ "$FEATURE_UBSAN" = "auto" ]; then + DISABLE_FEATURE_UBSAN=1 + else + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan " + ERROR=1 + fi + fi + if [ -n "$DISABLE_FEATURE_UBSAN" ]; then + unset FEATURE_UBSAN + fi +fi +if [ -n "$FEATURE_UBSAN" ]; then + : +else + : +fi if [ -n "$FEATURE_CXX_TESTS" ]; then # check dependency if dependency_error_cxx ; then @@ -983,6 +1026,12 @@ else echo 'off' fi +printf ' %-16s' 'ubsan:' +if [ -n "$FEATURE_UBSAN" ]; then + echo 'on' +else + echo 'off' +fi printf ' %-16s' 'cxx-tests:' if [ -n "$FEATURE_CXX_TESTS" ]; then echo 'on'