diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-07-26 19:03:47 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-07-26 19:04:23 +0000 |
commit | 7fa27ce4a07f19b07799a767fc29416f3b625afb (patch) | |
tree | 27825c83636c4de341eb09a74f49f5d38a15d165 /clang/lib/Frontend/InitPreprocessor.cpp | |
parent | e3b557809604d036af6e00c60f012c2025b59a5e (diff) |
Diffstat (limited to 'clang/lib/Frontend/InitPreprocessor.cpp')
-rw-r--r-- | clang/lib/Frontend/InitPreprocessor.cpp | 90 |
1 files changed, 58 insertions, 32 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 208c6a8db159..f8fae82fba12 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -451,9 +451,11 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__STDC_VERSION__", "199409L"); } else { // -- __cplusplus - // FIXME: Use correct value for C++23. - if (LangOpts.CPlusPlus2b) - Builder.defineMacro("__cplusplus", "202101L"); + if (LangOpts.CPlusPlus26) + // FIXME: Use correct value for C++26. + Builder.defineMacro("__cplusplus", "202400L"); + else if (LangOpts.CPlusPlus23) + Builder.defineMacro("__cplusplus", "202302L"); // [C++20] The integer literal 202002L. else if (LangOpts.CPlusPlus20) Builder.defineMacro("__cplusplus", "202002L"); @@ -572,6 +574,9 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__CLANG_RDC__"); if (!LangOpts.HIP) Builder.defineMacro("__CUDA__"); + if (LangOpts.GPUDefaultStream == + LangOptions::GPUDefaultStreamKind::PerThread) + Builder.defineMacro("CUDA_API_PER_THREAD_DEFAULT_STREAM"); } if (LangOpts.HIP) { Builder.defineMacro("__HIP__"); @@ -581,11 +586,20 @@ 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.CUDAIsDevice) + if (LangOpts.CUDAIsDevice) { Builder.defineMacro("__HIP_DEVICE_COMPILE__"); + if (!TI.hasHIPImageSupport()) { + Builder.defineMacro("__HIP_NO_IMAGE_SUPPORT__", "1"); + // Deprecated. + Builder.defineMacro("__HIP_NO_IMAGE_SUPPORT", "1"); + } + } if (LangOpts.GPUDefaultStream == - LangOptions::GPUDefaultStreamKind::PerThread) + LangOptions::GPUDefaultStreamKind::PerThread) { + Builder.defineMacro("__HIP_API_PER_THREAD_DEFAULT_STREAM__"); + // Deprecated. Builder.defineMacro("HIP_API_PER_THREAD_DEFAULT_STREAM"); + } } } @@ -606,7 +620,8 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, Builder.defineMacro("__cpp_unicode_literals", "200710L"); Builder.defineMacro("__cpp_user_defined_literals", "200809L"); Builder.defineMacro("__cpp_lambdas", "200907L"); - Builder.defineMacro("__cpp_constexpr", LangOpts.CPlusPlus2b ? "202211L" + Builder.defineMacro("__cpp_constexpr", LangOpts.CPlusPlus26 ? "202306L" + : LangOpts.CPlusPlus23 ? "202211L" : LangOpts.CPlusPlus20 ? "201907L" : LangOpts.CPlusPlus17 ? "201603L" : LangOpts.CPlusPlus14 ? "201304L" @@ -614,8 +629,10 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, Builder.defineMacro("__cpp_constexpr_in_decltype", "201711L"); Builder.defineMacro("__cpp_range_based_for", LangOpts.CPlusPlus17 ? "201603L" : "200907"); - Builder.defineMacro("__cpp_static_assert", - LangOpts.CPlusPlus17 ? "201411L" : "200410"); + Builder.defineMacro("__cpp_static_assert", LangOpts.CPlusPlus26 ? "202306L" + : LangOpts.CPlusPlus17 + ? "201411L" + : "200410"); Builder.defineMacro("__cpp_decltype", "200707L"); Builder.defineMacro("__cpp_attributes", "200809L"); Builder.defineMacro("__cpp_rvalue_references", "200610L"); @@ -681,7 +698,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, // Refer to the discussion of this at https://reviews.llvm.org/D128619. Builder.defineMacro("__cpp_concepts", "201907L"); Builder.defineMacro("__cpp_conditional_explicit", "201806L"); - //Builder.defineMacro("__cpp_consteval", "201811L"); + Builder.defineMacro("__cpp_consteval", "202211L"); Builder.defineMacro("__cpp_constexpr_dynamic_alloc", "201907L"); Builder.defineMacro("__cpp_constinit", "201907L"); Builder.defineMacro("__cpp_impl_coroutine", "201902L"); @@ -690,15 +707,15 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, //Builder.defineMacro("__cpp_modules", "201907L"); Builder.defineMacro("__cpp_using_enum", "201907L"); } - // C++2b features. - if (LangOpts.CPlusPlus2b) { + // C++23 features. + if (LangOpts.CPlusPlus23) { Builder.defineMacro("__cpp_implicit_move", "202011L"); Builder.defineMacro("__cpp_size_t_suffix", "202011L"); Builder.defineMacro("__cpp_if_consteval", "202106L"); Builder.defineMacro("__cpp_multidimensional_subscript", "202211L"); } - // We provide those C++2b features as extensions in earlier language modes, so + // We provide those C++23 features as extensions in earlier language modes, so // we also define their feature test macros. if (LangOpts.CPlusPlus11) Builder.defineMacro("__cpp_static_call_operator", "202207L"); @@ -707,10 +724,6 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, if (LangOpts.Char8) Builder.defineMacro("__cpp_char8_t", "202207L"); Builder.defineMacro("__cpp_impl_destroying_delete", "201806L"); - - // TS features. - if (LangOpts.Coroutines) - Builder.defineMacro("__cpp_coroutines", "201703L"); } /// InitializeOpenCLFeatureTestMacros - Define OpenCL macros based on target @@ -794,6 +807,18 @@ static void InitializePredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES", "3"); Builder.defineMacro("__OPENCL_MEMORY_SCOPE_SUB_GROUP", "4"); + // Define macros for floating-point data classes, used in __builtin_isfpclass. + Builder.defineMacro("__FPCLASS_SNAN", "0x0001"); + Builder.defineMacro("__FPCLASS_QNAN", "0x0002"); + Builder.defineMacro("__FPCLASS_NEGINF", "0x0004"); + Builder.defineMacro("__FPCLASS_NEGNORMAL", "0x0008"); + Builder.defineMacro("__FPCLASS_NEGSUBNORMAL", "0x0010"); + Builder.defineMacro("__FPCLASS_NEGZERO", "0x0020"); + Builder.defineMacro("__FPCLASS_POSZERO", "0x0040"); + Builder.defineMacro("__FPCLASS_POSSUBNORMAL", "0x0080"); + Builder.defineMacro("__FPCLASS_POSNORMAL", "0x0100"); + Builder.defineMacro("__FPCLASS_POSINF", "0x0200"); + // Support for #pragma redefine_extname (Sun compatibility) Builder.defineMacro("__PRAGMA_REDEFINE_EXTNAME", "1"); @@ -1252,16 +1277,15 @@ static void InitializePredefinedMacros(const TargetInfo &TI, case 45: Builder.defineMacro("_OPENMP", "201511"); break; - case 51: - Builder.defineMacro("_OPENMP", "202011"); + case 50: + Builder.defineMacro("_OPENMP", "201811"); break; case 52: Builder.defineMacro("_OPENMP", "202111"); break; - case 50: - default: - // Default version is OpenMP 5.0 - Builder.defineMacro("_OPENMP", "201811"); + default: // case 51: + // Default version is OpenMP 5.1 + Builder.defineMacro("_OPENMP", "202011"); break; } } @@ -1301,6 +1325,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__GLIBCXX_BITSIZE_INT_N_0", "128"); } + // ELF targets define __ELF__ + if (TI.getTriple().isOSBinFormatELF()) + Builder.defineMacro("__ELF__"); + // Get other target #defines. TI.getTargetDefines(LangOpts, Builder); } @@ -1317,17 +1345,17 @@ void clang::InitializePreprocessor( llvm::raw_string_ostream Predefines(PredefineBuffer); MacroBuilder Builder(Predefines); - // Emit line markers for various builtin sections of the file. We don't do - // this in asm preprocessor mode, because "# 4" is not a line marker directive - // in this mode. - if (!PP.getLangOpts().AsmPreprocessor) - Builder.append("# 1 \"<built-in>\" 3"); + // Emit line markers for various builtin sections of the file. The 3 here + // marks <built-in> as being a system header, which suppresses warnings when + // the same macro is defined multiple times. + Builder.append("# 1 \"<built-in>\" 3"); // Install things like __POWERPC__, __GNUC__, etc into the macro table. if (InitOpts.UsePredefines) { // FIXME: This will create multiple definitions for most of the predefined // macros. This is not the right way to handle this. - if ((LangOpts.CUDA || LangOpts.OpenMPIsDevice || LangOpts.SYCLIsDevice) && + if ((LangOpts.CUDA || LangOpts.OpenMPIsTargetDevice || + LangOpts.SYCLIsDevice) && PP.getAuxTargetInfo()) InitializePredefinedMacros(*PP.getAuxTargetInfo(), LangOpts, FEOpts, PP.getPreprocessorOpts(), Builder); @@ -1359,8 +1387,7 @@ void clang::InitializePreprocessor( // Add on the predefines from the driver. Wrap in a #line directive to report // that they come from the command line. - if (!PP.getLangOpts().AsmPreprocessor) - Builder.append("# 1 \"<command line>\" 1"); + Builder.append("# 1 \"<command line>\" 1"); // Process #define's and #undef's in the order they are given. for (unsigned i = 0, e = InitOpts.Macros.size(); i != e; ++i) { @@ -1372,8 +1399,7 @@ void clang::InitializePreprocessor( } // Exit the command line and go back to <built-in> (2 is LC_LEAVE). - if (!PP.getLangOpts().AsmPreprocessor) - Builder.append("# 1 \"<built-in>\" 2"); + Builder.append("# 1 \"<built-in>\" 2"); // If -imacros are specified, include them now. These are processed before // any -include directives. |