aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-12-18 20:30:12 +0000
committerDimitry Andric <dim@FreeBSD.org>2024-04-06 20:11:55 +0000
commit5f757f3ff9144b609b3c433dfd370cc6bdc191ad (patch)
tree1b4e980b866cd26a00af34c0a653eb640bd09caf /contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp
parent3e1c8a35f741a5d114d0ba670b15191355711fe9 (diff)
parent312c0ed19cc5276a17bacf2120097bec4515b0f1 (diff)
Diffstat (limited to 'contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp')
-rw-r--r--contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp47
1 files changed, 39 insertions, 8 deletions
diff --git a/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp b/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp
index f8fae82fba12..d83128adb511 100644
--- a/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp
@@ -438,9 +438,8 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
// value is, are implementation-defined.
// (Removed in C++20.)
if (!LangOpts.CPlusPlus) {
- // FIXME: Use correct value for C23.
- if (LangOpts.C2x)
- Builder.defineMacro("__STDC_VERSION__", "202000L");
+ if (LangOpts.C23)
+ Builder.defineMacro("__STDC_VERSION__", "202311L");
else if (LangOpts.C17)
Builder.defineMacro("__STDC_VERSION__", "201710L");
else if (LangOpts.C11)
@@ -586,6 +585,11 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__HIP_MEMORY_SCOPE_WORKGROUP", "3");
Builder.defineMacro("__HIP_MEMORY_SCOPE_AGENT", "4");
Builder.defineMacro("__HIP_MEMORY_SCOPE_SYSTEM", "5");
+ if (LangOpts.HIPStdPar) {
+ Builder.defineMacro("__HIPSTDPAR__");
+ if (LangOpts.HIPStdParInterposeAlloc)
+ Builder.defineMacro("__HIPSTDPAR_INTERPOSE_ALLOC__");
+ }
if (LangOpts.CUDAIsDevice) {
Builder.defineMacro("__HIP_DEVICE_COMPILE__");
if (!TI.hasHIPImageSupport()) {
@@ -601,6 +605,17 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("HIP_API_PER_THREAD_DEFAULT_STREAM");
}
}
+
+ if (LangOpts.OpenACC) {
+ // FIXME: When we have full support for OpenACC, we should set this to the
+ // version we support. Until then, set as '1' by default, but provide a
+ // temporary mechanism for users to override this so real-world examples can
+ // be tested against.
+ if (!LangOpts.OpenACCMacroOverride.empty())
+ Builder.defineMacro("_OPENACC", LangOpts.OpenACCMacroOverride);
+ else
+ Builder.defineMacro("_OPENACC", "1");
+ }
}
/// Initialize the predefined C++ language feature test macros defined in
@@ -720,6 +735,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
if (LangOpts.CPlusPlus11)
Builder.defineMacro("__cpp_static_call_operator", "202207L");
Builder.defineMacro("__cpp_named_character_escapes", "202207L");
+ Builder.defineMacro("__cpp_placeholder_variables", "202306L");
if (LangOpts.Char8)
Builder.defineMacro("__cpp_char8_t", "202207L");
@@ -793,6 +809,13 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__ATOMIC_ACQ_REL", "4");
Builder.defineMacro("__ATOMIC_SEQ_CST", "5");
+ // Define macros for the clang atomic scopes.
+ Builder.defineMacro("__MEMORY_SCOPE_SYSTEM", "0");
+ Builder.defineMacro("__MEMORY_SCOPE_DEVICE", "1");
+ Builder.defineMacro("__MEMORY_SCOPE_WRKGRP", "2");
+ Builder.defineMacro("__MEMORY_SCOPE_WVFRNT", "3");
+ Builder.defineMacro("__MEMORY_SCOPE_SINGLE", "4");
+
// Define macros for the OpenCL memory scope.
// The values should match AtomicScopeOpenCLModel::ID enum.
static_assert(
@@ -1297,11 +1320,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__CUDA_ARCH__");
}
- // We need to communicate this to our CUDA header wrapper, which in turn
- // informs the proper CUDA headers of this choice.
- if (LangOpts.CUDADeviceApproxTranscendentals || LangOpts.FastMath) {
- Builder.defineMacro("__CLANG_CUDA_APPROX_TRANSCENDENTALS__");
- }
+ // We need to communicate this to our CUDA/HIP header wrapper, which in turn
+ // informs the proper CUDA/HIP headers of this choice.
+ if (LangOpts.GPUDeviceApproxTranscendentals)
+ Builder.defineMacro("__CLANG_GPU_APPROX_TRANSCENDENTALS__");
// Define a macro indicating that the source file is being compiled with a
// SYCL device compiler which doesn't produce host binary.
@@ -1329,6 +1351,15 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
if (TI.getTriple().isOSBinFormatELF())
Builder.defineMacro("__ELF__");
+ // Target OS macro definitions.
+ if (PPOpts.DefineTargetOSMacros) {
+ const llvm::Triple &Triple = TI.getTriple();
+#define TARGET_OS(Name, Predicate) \
+ Builder.defineMacro(#Name, (Predicate) ? "1" : "0");
+#include "clang/Basic/TargetOSMacros.def"
+#undef TARGET_OS
+ }
+
// Get other target #defines.
TI.getTargetDefines(LangOpts, Builder);
}