diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-08-22 19:00:43 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-11-13 20:39:49 +0000 |
| commit | fe6060f10f634930ff71b7c50291ddc610da2475 (patch) | |
| tree | 1483580c790bd4d27b6500a7542b5ee00534d3cc /contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp | |
| parent | b61bce17f346d79cecfd8f195a64b10f77be43b1 (diff) | |
| parent | 344a3780b2e33f6ca763666c380202b18aab72a3 (diff) | |
Diffstat (limited to 'contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp')
| -rw-r--r-- | contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp b/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp index c64a912ce919..bca0bb4ada67 100644 --- a/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp +++ b/contrib/llvm-project/clang/lib/Frontend/InitPreprocessor.cpp @@ -168,7 +168,7 @@ static void DefineTypeSize(const Twine &MacroName, unsigned TypeWidth, MacroBuilder &Builder) { llvm::APInt MaxVal = isSigned ? llvm::APInt::getSignedMaxValue(TypeWidth) : llvm::APInt::getMaxValue(TypeWidth); - Builder.defineMacro(MacroName, MaxVal.toString(10, isSigned) + ValSuffix); + Builder.defineMacro(MacroName, toString(MaxVal, 10, isSigned) + ValSuffix); } /// DefineTypeSize - An overloaded helper that uses TargetInfo to determine @@ -216,6 +216,11 @@ static void DefineExactWidthIntType(TargetInfo::IntType Ty, if (TypeWidth == 64) Ty = IsSigned ? TI.getInt64Type() : TI.getUInt64Type(); + // Use the target specified int16 type when appropriate. Some MCU targets + // (such as AVR) have definition of [u]int16_t to [un]signed int. + if (TypeWidth == 16) + Ty = IsSigned ? TI.getInt16Type() : TI.getUInt16Type(); + const char *Prefix = IsSigned ? "__INT" : "__UINT"; DefineType(Prefix + Twine(TypeWidth) + "_TYPE__", Ty, Builder); @@ -474,10 +479,12 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, Builder.defineMacro("__FAST_RELAXED_MATH__"); } - if (LangOpts.SYCL) { + if (LangOpts.SYCLIsDevice || LangOpts.SYCLIsHost) { // SYCL Version is set to a value when building SYCL applications if (LangOpts.getSYCLVersion() == LangOptions::SYCL_2017) Builder.defineMacro("CL_SYCL_LANGUAGE_VERSION", "121"); + else if (LangOpts.getSYCLVersion() == LangOptions::SYCL_2020) + Builder.defineMacro("SYCL_LANGUAGE_VERSION", "202001"); } // Not "standard" per se, but available even with the -undef flag. @@ -587,7 +594,12 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, Builder.defineMacro("__cpp_designated_initializers", "201707L"); Builder.defineMacro("__cpp_impl_three_way_comparison", "201907L"); //Builder.defineMacro("__cpp_modules", "201907L"); - //Builder.defineMacro("__cpp_using_enum", "201907L"); + Builder.defineMacro("__cpp_using_enum", "201907L"); + } + // C++2b features. + if (LangOpts.CPlusPlus2b) { + Builder.defineMacro("__cpp_implicit_move", "202011L"); + Builder.defineMacro("__cpp_size_t_suffix", "202011L"); } if (LangOpts.Char8) Builder.defineMacro("__cpp_char8_t", "201811L"); @@ -598,6 +610,29 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, Builder.defineMacro("__cpp_coroutines", "201703L"); } +/// InitializeOpenCLFeatureTestMacros - Define OpenCL macros based on target +/// settings and language version +void InitializeOpenCLFeatureTestMacros(const TargetInfo &TI, + const LangOptions &Opts, + MacroBuilder &Builder) { + const llvm::StringMap<bool> &OpenCLFeaturesMap = TI.getSupportedOpenCLOpts(); + // FIXME: OpenCL options which affect language semantics/syntax + // should be moved into LangOptions. + auto defineOpenCLExtMacro = [&](llvm::StringRef Name, auto... OptArgs) { + // Check if extension is supported by target and is available in this + // OpenCL version + if (TI.hasFeatureEnabled(OpenCLFeaturesMap, Name) && + OpenCLOptions::isOpenCLOptionAvailableIn(Opts, OptArgs...)) + Builder.defineMacro(Name); + }; +#define OPENCL_GENERIC_EXTENSION(Ext, ...) \ + defineOpenCLExtMacro(#Ext, __VA_ARGS__); +#include "clang/Basic/OpenCLExtensions.def" + + // Assume compiling for FULL profile + Builder.defineMacro("__opencl_c_int64"); +} + static void InitializePredefinedMacros(const TargetInfo &TI, const LangOptions &LangOpts, const FrontendOptions &FEOpts, @@ -775,6 +810,21 @@ static void InitializePredefinedMacros(const TargetInfo &TI, } } + // Macros to help identify the narrow and wide character sets + // FIXME: clang currently ignores -fexec-charset=. If this changes, + // then this may need to be updated. + Builder.defineMacro("__clang_literal_encoding__", "\"UTF-8\""); + if (TI.getTypeWidth(TI.getWCharType()) >= 32) { + // FIXME: 32-bit wchar_t signals UTF-32. This may change + // if -fwide-exec-charset= is ever supported. + Builder.defineMacro("__clang_wide_literal_encoding__", "\"UTF-32\""); + } else { + // FIXME: Less-than 32-bit wchar_t generally means UTF-16 + // (e.g., Windows, 32-bit IBM). This may need to be + // updated if -fwide-exec-charset= is ever supported. + Builder.defineMacro("__clang_wide_literal_encoding__", "\"UTF-16\""); + } + if (LangOpts.Optimize) Builder.defineMacro("__OPTIMIZE__"); if (LangOpts.OptimizeSize) @@ -967,8 +1017,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, DefineFastIntType(64, true, TI, Builder); DefineFastIntType(64, false, TI, Builder); - char UserLabelPrefix[2] = {TI.getDataLayout().getGlobalPrefix(), 0}; - Builder.defineMacro("__USER_LABEL_PREFIX__", UserLabelPrefix); + Builder.defineMacro("__USER_LABEL_PREFIX__", TI.getUserLabelPrefix()); if (LangOpts.FastMath || LangOpts.FiniteMathOnly) Builder.defineMacro("__FINITE_MATH_ONLY__", "1"); @@ -1120,7 +1169,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, // OpenCL definitions. if (LangOpts.OpenCL) { - TI.getOpenCLFeatureDefines(LangOpts, Builder); + InitializeOpenCLFeatureTestMacros(TI, LangOpts, Builder); if (TI.getTriple().isSPIR()) Builder.defineMacro("__IMAGE_SUPPORT__"); |
