[compiler-rt] 9e25a42 - [TySan] Make TySan compatible with UBSan (#169036)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 28 04:34:39 PST 2025
Author: Matthew Nagy
Date: 2025-11-28T12:34:33Z
New Revision: 9e25a423d07bdcc2686defedcd509fb405d250db
URL: https://github.com/llvm/llvm-project/commit/9e25a423d07bdcc2686defedcd509fb405d250db
DIFF: https://github.com/llvm/llvm-project/commit/9e25a423d07bdcc2686defedcd509fb405d250db.diff
LOG: [TySan] Make TySan compatible with UBSan (#169036)
Added:
Modified:
clang/lib/Driver/SanitizerArgs.cpp
compiler-rt/lib/tysan/CMakeLists.txt
compiler-rt/test/ubsan/CMakeLists.txt
compiler-rt/test/ubsan/TestCases/Misc/Posix/sigaction.cpp
compiler-rt/test/ubsan/TestCases/Misc/coverage-levels.cpp
compiler-rt/test/ubsan/lit.common.cfg.py
llvm/docs/ReleaseNotes.md
Removed:
################################################################################
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index d5a0b65ab758f..be068b2381d06 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -358,7 +358,7 @@ bool SanitizerArgs::needsFuzzerInterceptors() const {
bool SanitizerArgs::needsUbsanRt() const {
// All of these include ubsan.
if (needsAsanRt() || needsMsanRt() || needsNsanRt() || needsHwasanRt() ||
- needsTsanRt() || needsDfsanRt() || needsLsanRt() ||
+ needsTsanRt() || needsDfsanRt() || needsLsanRt() || needsTysanRt() ||
needsCfiCrossDsoDiagRt() || (needsScudoRt() && !requiresMinimalRuntime()))
return false;
diff --git a/compiler-rt/lib/tysan/CMakeLists.txt b/compiler-rt/lib/tysan/CMakeLists.txt
index 7d13ae3963919..e7a6e71b86a0c 100644
--- a/compiler-rt/lib/tysan/CMakeLists.txt
+++ b/compiler-rt/lib/tysan/CMakeLists.txt
@@ -46,8 +46,10 @@ if(APPLE)
OBJECT_LIBS RTTysan_dynamic
RTInterception
RTSanitizerCommon
+ RTSanitizerCommonCoverage
RTSanitizerCommonLibc
RTSanitizerCommonSymbolizer
+ RTUbsan
CFLAGS ${TYSAN_DYNAMIC_CFLAGS}
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
DEFS ${TYSAN_DYNAMIC_DEFINITIONS}
@@ -71,8 +73,10 @@ else()
SOURCES ${TYSAN_SOURCES}
OBJECT_LIBS RTInterception
RTSanitizerCommon
+ RTSanitizerCommonCoverage
RTSanitizerCommonLibc
RTSanitizerCommonSymbolizer
+ RTUbsan
CFLAGS ${TYSAN_CFLAGS}
PARENT_TARGET tysan)
endforeach()
diff --git a/compiler-rt/test/ubsan/CMakeLists.txt b/compiler-rt/test/ubsan/CMakeLists.txt
index 410585e6a07ef..f0b84f431472a 100644
--- a/compiler-rt/test/ubsan/CMakeLists.txt
+++ b/compiler-rt/test/ubsan/CMakeLists.txt
@@ -62,6 +62,9 @@ foreach(arch ${UBSAN_TEST_ARCH})
if(COMPILER_RT_HAS_TSAN AND ";${TSAN_SUPPORTED_ARCH};" MATCHES ";${arch};" AND NOT ANDROID)
add_ubsan_testsuites("ThreadSanitizer" tsan ${arch})
endif()
+ if(COMPILER_RT_HAS_TYSAN AND ";${TYSAN_SUPPORTED_ARCH};" MATCHES ";${arch};")
+ add_ubsan_testsuites("TypeSanitizer" tysan ${arch})
+ endif()
endforeach()
macro(add_ubsan_device_testsuite test_mode sanitizer platform arch)
@@ -124,6 +127,10 @@ if(APPLE)
if(COMPILER_RT_HAS_TSAN AND ";${TSAN_SUPPORTED_ARCH};" MATCHES ";${arch};")
add_ubsan_device_testsuite("ThreadSanitizer" tsan ${platform} ${arch})
endif()
+
+ if(COMPILER_RT_HAS_TYSAN AND ";${TYSAN_SUPPORTED_ARCH};" MATCHES ";${arch};")
+ add_ubsan_device_testsuite("TypeSanitizer" tysan ${platform} ${arch})
+ endif()
endforeach()
endforeach()
endif()
diff --git a/compiler-rt/test/ubsan/TestCases/Misc/Posix/sigaction.cpp b/compiler-rt/test/ubsan/TestCases/Misc/Posix/sigaction.cpp
index 0ab65bd30d92c..0b848ec8ac471 100644
--- a/compiler-rt/test/ubsan/TestCases/Misc/Posix/sigaction.cpp
+++ b/compiler-rt/test/ubsan/TestCases/Misc/Posix/sigaction.cpp
@@ -7,6 +7,9 @@
// Reason unknown, needs debugging.
// UNSUPPORTED: target=aarch64{{.*}} && ubsan-tsan
+// TySan doesn't build a shared library
+// UNSUPPORTED: ubsan-tysan
+
#include <assert.h>
#include <signal.h>
#include <stdio.h>
diff --git a/compiler-rt/test/ubsan/TestCases/Misc/coverage-levels.cpp b/compiler-rt/test/ubsan/TestCases/Misc/coverage-levels.cpp
index c6133178262cc..fd019d2242552 100644
--- a/compiler-rt/test/ubsan/TestCases/Misc/coverage-levels.cpp
+++ b/compiler-rt/test/ubsan/TestCases/Misc/coverage-levels.cpp
@@ -19,8 +19,9 @@
// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=edge,trace-pc-guard %s -o %t
// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3 --check-prefix=CHECK_WARN
-// Coverage is not yet implemented in TSan.
+// Coverage is not yet implemented in TSan or TySan.
// XFAIL: ubsan-tsan
+// XFAIL: ubsan-tysan
// UNSUPPORTED: ubsan-standalone-static
// No coverage support
// UNSUPPORTED: target={{.*openbsd.*}}
diff --git a/compiler-rt/test/ubsan/lit.common.cfg.py b/compiler-rt/test/ubsan/lit.common.cfg.py
index 25e527903788e..314d207f94ad5 100644
--- a/compiler-rt/test/ubsan/lit.common.cfg.py
+++ b/compiler-rt/test/ubsan/lit.common.cfg.py
@@ -39,6 +39,9 @@ def get_required_attr(config, attr_name):
elif ubsan_lit_test_mode == "ThreadSanitizer":
config.available_features.add("ubsan-tsan")
clang_ubsan_cflags = ["-fsanitize=thread"]
+elif ubsan_lit_test_mode == "TypeSanitizer":
+ config.available_features.add("ubsan-tysan")
+ clang_ubsan_cflags = ["-fsanitize=type"]
else:
lit_config.fatal("Unknown UBSan test mode: %r" % ubsan_lit_test_mode)
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 6203c01453d55..c6c527d1ae964 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -222,6 +222,7 @@ Changes to BOLT
Changes to Sanitizers
---------------------
+* Support running TypeSanitizer with UndefinedBehaviourSanitizer.
* TypeSanitizer no longer inlines all instrumentation by default. Added the
`-f[no-]sanitize-type-outline-instrumentation` flags to give users control
over this behaviour.
More information about the llvm-commits
mailing list