From 96f35266a5d6f4497f87d22ff4a38320e8a8b4d9 Mon Sep 17 00:00:00 2001 From: Michal Gorny Date: Sun, 22 Sep 2019 20:55:01 +0000 Subject: [PATCH] [clang] [Basic] Enable __has_feature(leak_sanitizer) Add a 'leak_sanitizer' feature akin to existing '*_sanitizer' features to let programmers switch code paths accounting for leak sanitizers being enabled. Differential Revision: https://reviews.llvm.org/D67719 llvm-svn: 372527 --- clang/include/clang/Basic/Features.def | 2 ++ clang/test/Lexer/has_feature_leak_sanitizer.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 clang/test/Lexer/has_feature_leak_sanitizer.cpp diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def index 57132f5c0ffb9..28eb694ba9a89 100644 --- a/clang/include/clang/Basic/Features.def +++ b/clang/include/clang/Basic/Features.def @@ -39,6 +39,8 @@ FEATURE(address_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::Address | SanitizerKind::KernelAddress)) +FEATURE(leak_sanitizer, + LangOpts.Sanitize.has(SanitizerKind::Leak)) FEATURE(hwaddress_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress)) diff --git a/clang/test/Lexer/has_feature_leak_sanitizer.cpp b/clang/test/Lexer/has_feature_leak_sanitizer.cpp new file mode 100644 index 0000000000000..00ca96f4ba73f --- /dev/null +++ b/clang/test/Lexer/has_feature_leak_sanitizer.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -E -fsanitize=leak %s -o - | FileCheck --check-prefix=CHECK-LSAN %s +// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-LSAN %s + +#if __has_feature(leak_sanitizer) +int LeakSanitizerEnabled(); +#else +int LeakSanitizerDisabled(); +#endif + +// CHECK-LSAN: LeakSanitizerEnabled +// CHECK-NO-LSAN: LeakSanitizerDisabled