From d3d32f47328770ca72997086d44a59397d1ea015 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Wed, 7 May 2025 17:43:41 -0700 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20change?= =?UTF-8?q?s=20to=20main=20this=20commit=20is=20based=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 [skip ci] --- compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp | 8 +++++++- .../test/ubsan_minimal/TestCases/override-callback.c | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp b/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp index c3ffd41bcacc0..9c03ddf7d063c 100644 --- a/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp +++ b/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp @@ -85,6 +85,12 @@ SANITIZER_INTERFACE_WEAK_DEF(void, __ubsan_report_error, const char *kind, } } +SANITIZER_INTERFACE_WEAK_DEF(void, __ubsan_report_error_fatal, const char *kind, + uintptr_t caller) { + // Use another handlers, in case it's already overriden. + __ubsan_report_error(kind, caller); +} + #if defined(__ANDROID__) extern "C" __attribute__((weak)) void android_set_abort_message(const char *); static void abort_with_message(const char *kind, uintptr_t caller) { @@ -121,7 +127,7 @@ void NORETURN CheckFailed(const char *file, int, const char *cond, u64, u64) { #define HANDLER_NORECOVER(name, kind) \ INTERFACE void __ubsan_handle_##name##_minimal_abort() { \ uintptr_t caller = GET_CALLER_PC(); \ - __ubsan_report_error(kind, caller); \ + __ubsan_report_error_fatal(kind, caller); \ abort_with_message(kind, caller); \ } diff --git a/compiler-rt/test/ubsan_minimal/TestCases/override-callback.c b/compiler-rt/test/ubsan_minimal/TestCases/override-callback.c index e11a3712f1be3..8c3b4db9a9cd8 100644 --- a/compiler-rt/test/ubsan_minimal/TestCases/override-callback.c +++ b/compiler-rt/test/ubsan_minimal/TestCases/override-callback.c @@ -1,4 +1,6 @@ -// RUN: %clang -fsanitize=implicit-integer-sign-change %s -o %t && %run %t 0 2>&1 | FileCheck %s +// RUN: %clang -fsanitize=implicit-integer-sign-change %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clang -fsanitize=implicit-integer-sign-change -fno-sanitize-recover=all %s -o %t && not --crash %run %t 2>&1 | FileCheck %s --check-prefixes=FATAL + #include #include #include @@ -9,7 +11,12 @@ void __ubsan_report_error(const char *kind, uintptr_t caller) { fprintf(stderr, "CUSTOM_CALLBACK: %s\n", kind); } +void __ubsan_report_error_fatal(const char *kind, uintptr_t caller) { + fprintf(stderr, "FATAL_CALLBACK: %s\n", kind); +} + int main(int argc, const char **argv) { int32_t t0 = (~((uint32_t)0)); // CHECK: CUSTOM_CALLBACK: implicit-conversion + // FATAL: FATAL_CALLBACK: implicit-conversion }