From: Leonard Chan Date: Sat, 22 Sep 2018 01:03:16 +0000 (+0000) Subject: [Lexer] Add udefined_behavior_sanitizer feature X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d05cbec4c2c7fcf52a428d3253ca0c97662d7285;p=clang [Lexer] Add udefined_behavior_sanitizer feature This can be used to detect whether the code is being built with UBSan using the __has_feature(undefined_behavior_sanitizer) predicate. Differential Revision: https://reviews.llvm.org/D52386 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342793 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Features.def b/include/clang/Basic/Features.def index f816d1894e..0061135be6 100644 --- a/include/clang/Basic/Features.def +++ b/include/clang/Basic/Features.def @@ -38,6 +38,8 @@ FEATURE(hwaddress_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress | SanitizerKind::KernelHWAddress)) FEATURE(xray_instrument, LangOpts.XRayInstrument) +FEATURE(undefined_behavior_sanitizer, + LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined)) FEATURE(assume_nonnull, true) FEATURE(attribute_analyzer_noreturn, true) FEATURE(attribute_availability, true) diff --git a/test/Lexer/has_feature_undefined_behavior_sanitizer.cpp b/test/Lexer/has_feature_undefined_behavior_sanitizer.cpp new file mode 100644 index 0000000000..62e5316dde --- /dev/null +++ b/test/Lexer/has_feature_undefined_behavior_sanitizer.cpp @@ -0,0 +1,13 @@ +// RUN: %clang -E -fsanitize=undefined %s -o - | FileCheck --check-prefix=CHECK-UBSAN %s +// RUN: %clang -E -fsanitize=alignment %s -o - | FileCheck --check-prefix=CHECK-ALIGNMENT %s +// RUN: %clang -E %s -o - | FileCheck --check-prefix=CHECK-NO-UBSAN %s + +#if __has_feature(undefined_behavior_sanitizer) +int UBSanEnabled(); +#else +int UBSanDisabled(); +#endif + +// CHECK-UBSAN: UBSanEnabled +// CHECK-ALIGNMENT: UBSanEnabled +// CHECK-NO-UBSAN: UBSanDisabled