[clang] 568c23b - Frontend: Define __SANITIZE_*__ macros for certain sanitizers.
via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 15 16:13:26 PDT 2025
Author: Peter Collingbourne
Date: 2025-08-15T16:13:23-07:00
New Revision: 568c23bbd3303518c5056d7f03444dae4fdc8a9c
URL: https://github.com/llvm/llvm-project/commit/568c23bbd3303518c5056d7f03444dae4fdc8a9c
DIFF: https://github.com/llvm/llvm-project/commit/568c23bbd3303518c5056d7f03444dae4fdc8a9c.diff
LOG: Frontend: Define __SANITIZE_*__ macros for certain sanitizers.
Per discussion with @ojhunt and @AaronBallman we are moving towards
predefined macros and away from __has_feature and __has_extension
for detecting sanitizers and other similar features. The rationale
is that __has_feature is only really meant for standardized features
(see the comment at the top of clang/include/clang/Basic/Features.def),
and __has_extension has the issues discovered as part of #153104.
Let's start by defining macros for ASan, HWASan and TSan, consistently
with gcc.
Reviewers: vitalybuka, ojhunt, AaronBallman, fmayer
Reviewed By: fmayer, vitalybuka
Pull Request: https://github.com/llvm/llvm-project/pull/153888
Added:
clang/test/Preprocessor/sanitizer-predefines.c
Modified:
clang/lib/Frontend/InitPreprocessor.cpp
Removed:
################################################################################
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 008a35d5265e1..5980806fba5e4 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -1519,6 +1519,13 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
if (TI.getTriple().isOSBinFormatELF())
Builder.defineMacro("__ELF__");
+ if (LangOpts.Sanitize.has(SanitizerKind::Address))
+ Builder.defineMacro("__SANITIZE_ADDRESS__");
+ if (LangOpts.Sanitize.has(SanitizerKind::HWAddress))
+ Builder.defineMacro("__SANITIZE_HWADDRESS__");
+ if (LangOpts.Sanitize.has(SanitizerKind::Thread))
+ Builder.defineMacro("__SANITIZE_THREAD__");
+
// Target OS macro definitions.
if (PPOpts.DefineTargetOSMacros) {
const llvm::Triple &Triple = TI.getTriple();
diff --git a/clang/test/Preprocessor/sanitizer-predefines.c b/clang/test/Preprocessor/sanitizer-predefines.c
new file mode 100644
index 0000000000000..9d2f6bf2517a2
--- /dev/null
+++ b/clang/test/Preprocessor/sanitizer-predefines.c
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=address %s | FileCheck %s --check-prefix=ASAN
+// ASAN: #define __SANITIZE_ADDRESS__ 1
+
+// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=hwaddress %s | FileCheck %s --check-prefix=HWASAN
+// HWASAN: #define __SANITIZE_HWADDRESS__ 1
+
+// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=thread %s | FileCheck %s --check-prefix=TSAN
+// TSAN: #define __SANITIZE_THREAD__ 1
More information about the cfe-commits
mailing list