From 1b935a23a3fc59d556f8165c061380b5a0cb8481 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Tue, 28 Apr 2015 00:56:36 +0000 Subject: [PATCH] Allow UBSan+MSan and UBSan+TSan combinations (Clang part). Embed UBSan runtime into TSan and MSan runtimes in the same as we do in ASan. Extend UBSan test suite to also run tests for these combinations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235953 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/SanitizerArgs.cpp | 8 ++++---- test/Driver/fsanitize.c | 3 --- test/Driver/sanitizer-ld.c | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/Driver/SanitizerArgs.cpp b/lib/Driver/SanitizerArgs.cpp index cd3785cd90..f453208503 100644 --- a/lib/Driver/SanitizerArgs.cpp +++ b/lib/Driver/SanitizerArgs.cpp @@ -160,7 +160,9 @@ static bool getDefaultBlacklist(const Driver &D, uint64_t Kinds, bool SanitizerArgs::needsUbsanRt() const { return !UbsanTrapOnError && hasOneOf(Sanitizers, NeedsUbsanRt) && - !Sanitizers.has(SanitizerKind::Address); + !Sanitizers.has(SanitizerKind::Address) && + !Sanitizers.has(SanitizerKind::Memory) && + !Sanitizers.has(SanitizerKind::Thread); } bool SanitizerArgs::requiresPIE() const { @@ -284,9 +286,7 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC, std::make_pair(SanitizeKind::Address, SanitizeKind::Memory), std::make_pair(SanitizeKind::Thread, SanitizeKind::Memory), std::make_pair(SanitizeKind::Leak, SanitizeKind::Thread), - std::make_pair(SanitizeKind::Leak, SanitizeKind::Memory), - std::make_pair(SanitizeKind::NeedsUbsanRt, SanitizeKind::Thread), - std::make_pair(SanitizeKind::NeedsUbsanRt, SanitizeKind::Memory)}; + std::make_pair(SanitizeKind::Leak, SanitizeKind::Memory)}; for (auto G : IncompatibleGroups) { uint64_t Group = G.first; if (Kinds & Group) { diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c index 994b2b236c..280b6e6e31 100644 --- a/test/Driver/fsanitize.c +++ b/test/Driver/fsanitize.c @@ -57,9 +57,6 @@ // RUN: %clang -target x86_64-linux-gnu -fsanitize=leak,memory -pie -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANL-SANM // CHECK-SANL-SANM: '-fsanitize=leak' not allowed with '-fsanitize=memory' -// RUN: %clang -target x86_64-linux-gnu -fsanitize=signed-integer-overflow,memory -pie -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MSAN-UBSAN -// CHECK-MSAN-UBSAN: '-fsanitize=signed-integer-overflow' not allowed with '-fsanitize=memory' - // RUN: %clang -target x86_64-linux-gnu -fsanitize-memory-track-origins -pie %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ONLY-TRACK-ORIGINS // CHECK-ONLY-TRACK-ORIGINS: warning: argument unused during compilation: '-fsanitize-memory-track-origins' diff --git a/test/Driver/sanitizer-ld.c b/test/Driver/sanitizer-ld.c index 7cbc37ff0c..5fef8170e3 100644 --- a/test/Driver/sanitizer-ld.c +++ b/test/Driver/sanitizer-ld.c @@ -244,6 +244,22 @@ // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++" // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread" +// RUN: %clangxx -fsanitize=memory,undefined %s -### -o %t.o 2>&1 \ +// RUN: -target x86_64-unknown-linux \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-MSAN-UBSAN-LINUX-CXX %s +// CHECK-MSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}" +// CHECK-MSAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "-no-whole-archive" +// CHECK-MSAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan + +// RUN: %clangxx -fsanitize=thread,undefined %s -### -o %t.o 2>&1 \ +// RUN: -target x86_64-unknown-linux \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-TSAN-UBSAN-LINUX-CXX %s +// CHECK-TSAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}" +// CHECK-TSAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "-no-whole-archive" +// CHECK-TSAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan + // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: -resource-dir=%S/Inputs/resource_dir \ -- 2.50.1