27#include "llvm/ADT/APFloat.h"
28#include "llvm/IR/DataLayout.h"
29#include "llvm/IR/DerivedTypes.h"
33 while (!MacroBody.empty() &&
isWhitespace(MacroBody.back()))
34 MacroBody = MacroBody.drop_back();
35 return !MacroBody.empty() && MacroBody.back() ==
'\\';
43 std::pair<StringRef, StringRef> MacroPair = Macro.split(
'=');
44 StringRef MacroName = MacroPair.first;
45 StringRef MacroBody = MacroPair.second;
46 if (MacroName.size() != Macro.size()) {
48 StringRef::size_type End = MacroBody.find_first_of(
"\n\r");
49 if (End != StringRef::npos)
50 Diags.
Report(diag::warn_fe_macro_contains_embedded_newline)
52 MacroBody = MacroBody.substr(0, End);
57 Builder.defineMacro(MacroName, Twine(MacroBody) +
"\\\n");
59 Builder.defineMacro(MacroName, MacroBody);
62 Builder.defineMacro(Macro);
71 Builder.append(Twine(
"#include \"") +
File +
"\"");
75 Builder.append(Twine(
"#__include_macros \"") +
File +
"\"");
84 StringRef ImplicitIncludePCH) {
86 std::string(ImplicitIncludePCH), PP.
getFileManager(), PCHContainerRdr,
88 if (OriginalFile.empty())
97static T
PickFP(
const llvm::fltSemantics *Sem, T IEEEHalfVal, T IEEESingleVal,
98 T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal,
100 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEhalf())
102 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEsingle())
103 return IEEESingleVal;
104 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEdouble())
105 return IEEEDoubleVal;
106 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::x87DoubleExtended())
107 return X87DoubleExtendedVal;
108 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::PPCDoubleDouble())
109 return PPCDoubleDoubleVal;
110 assert(Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEquad());
115 const llvm::fltSemantics *Sem, StringRef Ext) {
116 const char *DenormMin, *Epsilon, *Max, *Min;
117 DenormMin =
PickFP(Sem,
"5.9604644775390625e-8",
"1.40129846e-45",
118 "4.9406564584124654e-324",
"3.64519953188247460253e-4951",
119 "4.94065645841246544176568792868221e-324",
120 "6.47517511943802511092443895822764655e-4966");
121 int Digits =
PickFP(Sem, 3, 6, 15, 18, 31, 33);
122 int DecimalDigits =
PickFP(Sem, 5, 9, 17, 21, 33, 36);
123 Epsilon =
PickFP(Sem,
"9.765625e-4",
"1.19209290e-7",
124 "2.2204460492503131e-16",
"1.08420217248550443401e-19",
125 "4.94065645841246544176568792868221e-324",
126 "1.92592994438723585305597794258492732e-34");
127 int MantissaDigits =
PickFP(Sem, 11, 24, 53, 64, 106, 113);
128 int Min10Exp =
PickFP(Sem, -4, -37, -307, -4931, -291, -4931);
129 int Max10Exp =
PickFP(Sem, 4, 38, 308, 4932, 308, 4932);
130 int MinExp =
PickFP(Sem, -13, -125, -1021, -16381, -968, -16381);
131 int MaxExp =
PickFP(Sem, 16, 128, 1024, 16384, 1024, 16384);
132 Min =
PickFP(Sem,
"6.103515625e-5",
"1.17549435e-38",
"2.2250738585072014e-308",
133 "3.36210314311209350626e-4932",
134 "2.00416836000897277799610805135016e-292",
135 "3.36210314311209350626267781732175260e-4932");
136 Max =
PickFP(Sem,
"6.5504e+4",
"3.40282347e+38",
"1.7976931348623157e+308",
137 "1.18973149535723176502e+4932",
138 "1.79769313486231580793728971405301e+308",
139 "1.18973149535723176508575932662800702e+4932");
146 Builder.defineMacro(DefPrefix +
"DENORM_MIN__", Twine(DenormMin)+Ext);
147 Builder.defineMacro(DefPrefix +
"HAS_DENORM__");
148 Builder.defineMacro(DefPrefix +
"DIG__", Twine(Digits));
149 Builder.defineMacro(DefPrefix +
"DECIMAL_DIG__", Twine(DecimalDigits));
150 Builder.defineMacro(DefPrefix +
"EPSILON__", Twine(Epsilon)+Ext);
151 Builder.defineMacro(DefPrefix +
"HAS_INFINITY__");
152 Builder.defineMacro(DefPrefix +
"HAS_QUIET_NAN__");
153 Builder.defineMacro(DefPrefix +
"MANT_DIG__", Twine(MantissaDigits));
155 Builder.defineMacro(DefPrefix +
"MAX_10_EXP__", Twine(Max10Exp));
156 Builder.defineMacro(DefPrefix +
"MAX_EXP__", Twine(MaxExp));
157 Builder.defineMacro(DefPrefix +
"MAX__", Twine(Max)+Ext);
159 Builder.defineMacro(DefPrefix +
"MIN_10_EXP__",
"("+Twine(Min10Exp)+
")");
160 Builder.defineMacro(DefPrefix +
"MIN_EXP__",
"("+Twine(MinExp)+
")");
161 Builder.defineMacro(DefPrefix +
"MIN__", Twine(Min)+Ext);
169 StringRef ValSuffix,
bool isSigned,
171 llvm::APInt MaxVal = isSigned ? llvm::APInt::getSignedMaxValue(TypeWidth)
172 : llvm::APInt::getMaxValue(TypeWidth);
173 Builder.defineMacro(MacroName,
toString(MaxVal, 10, isSigned) + ValSuffix);
188 for (
const char *Fmt = IsSigned ?
"di" :
"ouxX"; *Fmt; ++Fmt) {
189 Builder.defineMacro(Prefix +
"_FMT" + Twine(*Fmt) +
"__",
190 Twine(
"\"") + FmtModifier + Twine(*Fmt) +
"\"");
201 Builder.defineMacro(MacroName, Twine(TI.
getTypeWidth(Ty)));
206 Builder.defineMacro(MacroName,
236 const char *Prefix = IsSigned ?
"__INT" :
"__UINT";
238 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
239 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
242 Builder.defineMacro(Prefix + Twine(TypeWidth) +
"_C_SUFFIX__", ConstSuffix);
258 const char *Prefix = IsSigned ?
"__INT" :
"__UINT";
259 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
266 if (Ty == TargetInfo::NoInt)
269 const char *Prefix = IsSigned ?
"__INT_LEAST" :
"__UINT_LEAST";
270 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
276 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
277 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
285 if (Ty == TargetInfo::NoInt)
288 const char *Prefix = IsSigned ?
"__INT_FAST" :
"__UINT_FAST";
289 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
295 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
296 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
318 Builder.defineMacro(
"_GLIBCXX_PREDEFINED_OBJC_ARC_IS_SCALAR");
327 llvm::raw_string_ostream Out(Result);
329 Out <<
"namespace std {\n"
331 <<
"struct __true_type;\n"
332 <<
"struct __false_type;\n"
335 Out <<
"template<typename _Tp> struct __is_scalar;\n"
338 if (LangOpts.ObjCAutoRefCount) {
339 Out <<
"template<typename _Tp>\n"
340 <<
"struct __is_scalar<__attribute__((objc_ownership(strong))) _Tp> {\n"
341 <<
" enum { __value = 0 };\n"
342 <<
" typedef __false_type __type;\n"
347 if (LangOpts.ObjCWeak) {
348 Out <<
"template<typename _Tp>\n"
349 <<
"struct __is_scalar<__attribute__((objc_ownership(weak))) _Tp> {\n"
350 <<
" enum { __value = 0 };\n"
351 <<
" typedef __false_type __type;\n"
356 if (LangOpts.ObjCAutoRefCount) {
357 Out <<
"template<typename _Tp>\n"
358 <<
"struct __is_scalar<__attribute__((objc_ownership(autoreleasing)))"
360 <<
" enum { __value = 0 };\n"
361 <<
" typedef __false_type __type;\n"
368 Builder.append(Result);
376 Builder.defineMacro(
"__hlsl_clang");
378 Builder.defineMacro(
"__HLSL_VERSION",
379 Twine((
unsigned)LangOpts.getHLSLVersion()));
381 if (LangOpts.NativeHalfType)
382 Builder.defineMacro(
"__HLSL_ENABLE_16_BIT",
383 Twine((
unsigned)LangOpts.getHLSLVersion()));
387 Builder.defineMacro(
"__SHADER_STAGE_VERTEX",
388 Twine((uint32_t)ShaderStage::Vertex));
389 Builder.defineMacro(
"__SHADER_STAGE_PIXEL",
390 Twine((uint32_t)ShaderStage::Pixel));
391 Builder.defineMacro(
"__SHADER_STAGE_GEOMETRY",
392 Twine((uint32_t)ShaderStage::Geometry));
393 Builder.defineMacro(
"__SHADER_STAGE_HULL",
394 Twine((uint32_t)ShaderStage::Hull));
395 Builder.defineMacro(
"__SHADER_STAGE_DOMAIN",
396 Twine((uint32_t)ShaderStage::Domain));
397 Builder.defineMacro(
"__SHADER_STAGE_COMPUTE",
398 Twine((uint32_t)ShaderStage::Compute));
399 Builder.defineMacro(
"__SHADER_STAGE_AMPLIFICATION",
400 Twine((uint32_t)ShaderStage::Amplification));
401 Builder.defineMacro(
"__SHADER_STAGE_MESH",
402 Twine((uint32_t)ShaderStage::Mesh));
403 Builder.defineMacro(
"__SHADER_STAGE_LIBRARY",
404 Twine((uint32_t)ShaderStage::Library));
406 uint32_t StageInteger =
static_cast<uint32_t
>(
407 hlsl::getStageFromEnvironment(TI.
getTriple().getEnvironment()));
409 Builder.defineMacro(
"__SHADER_TARGET_STAGE", Twine(StageInteger));
411 if (TI.
getTriple().getOS() == llvm::Triple::ShaderModel) {
412 VersionTuple Version = TI.
getTriple().getOSVersion();
413 Builder.defineMacro(
"__SHADER_TARGET_MAJOR", Twine(Version.getMajor()));
414 unsigned Minor = Version.getMinor().value_or(0);
415 Builder.defineMacro(
"__SHADER_TARGET_MINOR", Twine(Minor));
426 if (!LangOpts.MSVCCompat && !LangOpts.TraditionalCPP)
427 Builder.defineMacro(
"__STDC__");
431 if (LangOpts.Freestanding)
432 Builder.defineMacro(
"__STDC_HOSTED__",
"0");
434 Builder.defineMacro(
"__STDC_HOSTED__");
440 if (!LangOpts.CPlusPlus) {
443 Builder.defineMacro(
"__STDC_VERSION__",
"202000L");
444 else if (LangOpts.C17)
445 Builder.defineMacro(
"__STDC_VERSION__",
"201710L");
446 else if (LangOpts.C11)
447 Builder.defineMacro(
"__STDC_VERSION__",
"201112L");
448 else if (LangOpts.C99)
449 Builder.defineMacro(
"__STDC_VERSION__",
"199901L");
450 else if (!LangOpts.GNUMode && LangOpts.Digraphs)
451 Builder.defineMacro(
"__STDC_VERSION__",
"199409L");
454 if (LangOpts.CPlusPlus26)
456 Builder.defineMacro(
"__cplusplus",
"202400L");
457 else if (LangOpts.CPlusPlus23)
458 Builder.defineMacro(
"__cplusplus",
"202302L");
460 else if (LangOpts.CPlusPlus20)
461 Builder.defineMacro(
"__cplusplus",
"202002L");
463 else if (LangOpts.CPlusPlus17)
464 Builder.defineMacro(
"__cplusplus",
"201703L");
467 else if (LangOpts.CPlusPlus14)
468 Builder.defineMacro(
"__cplusplus",
"201402L");
471 else if (LangOpts.CPlusPlus11)
472 Builder.defineMacro(
"__cplusplus",
"201103L");
476 Builder.defineMacro(
"__cplusplus",
"199711L");
483 Builder.defineMacro(
"__STDCPP_DEFAULT_NEW_ALIGNMENT__",
490 if (LangOpts.getThreadModel() == LangOptions::ThreadModelKind::POSIX)
491 Builder.defineMacro(
"__STDCPP_THREADS__",
"1");
499 Builder.defineMacro(
"__STDC_UTF_16__",
"1");
500 Builder.defineMacro(
"__STDC_UTF_32__",
"1");
503 Builder.defineMacro(
"__OBJC__");
506 if (LangOpts.OpenCL) {
507 if (LangOpts.CPlusPlus) {
508 switch (LangOpts.OpenCLCPlusPlusVersion) {
510 Builder.defineMacro(
"__OPENCL_CPP_VERSION__",
"100");
513 Builder.defineMacro(
"__OPENCL_CPP_VERSION__",
"202100");
516 llvm_unreachable(
"Unsupported C++ version for OpenCL");
518 Builder.defineMacro(
"__CL_CPP_VERSION_1_0__",
"100");
519 Builder.defineMacro(
"__CL_CPP_VERSION_2021__",
"202100");
528 switch (LangOpts.OpenCLVersion) {
530 Builder.defineMacro(
"__OPENCL_C_VERSION__",
"100");
533 Builder.defineMacro(
"__OPENCL_C_VERSION__",
"110");
536 Builder.defineMacro(
"__OPENCL_C_VERSION__",
"120");
539 Builder.defineMacro(
"__OPENCL_C_VERSION__",
"200");
542 Builder.defineMacro(
"__OPENCL_C_VERSION__",
"300");
545 llvm_unreachable(
"Unsupported OpenCL version");
548 Builder.defineMacro(
"CL_VERSION_1_0",
"100");
549 Builder.defineMacro(
"CL_VERSION_1_1",
"110");
550 Builder.defineMacro(
"CL_VERSION_1_2",
"120");
551 Builder.defineMacro(
"CL_VERSION_2_0",
"200");
552 Builder.defineMacro(
"CL_VERSION_3_0",
"300");
555 Builder.defineMacro(
"__ENDIAN_LITTLE__");
557 if (LangOpts.FastRelaxedMath)
558 Builder.defineMacro(
"__FAST_RELAXED_MATH__");
561 if (LangOpts.SYCLIsDevice || LangOpts.SYCLIsHost) {
564 Builder.defineMacro(
"CL_SYCL_LANGUAGE_VERSION",
"121");
566 Builder.defineMacro(
"SYCL_LANGUAGE_VERSION",
"202001");
570 if (LangOpts.AsmPreprocessor)
571 Builder.defineMacro(
"__ASSEMBLER__");
573 if (LangOpts.GPURelocatableDeviceCode)
574 Builder.defineMacro(
"__CLANG_RDC__");
576 Builder.defineMacro(
"__CUDA__");
579 Builder.defineMacro(
"__HIP__");
580 Builder.defineMacro(
"__HIPCC__");
581 Builder.defineMacro(
"__HIP_MEMORY_SCOPE_SINGLETHREAD",
"1");
582 Builder.defineMacro(
"__HIP_MEMORY_SCOPE_WAVEFRONT",
"2");
583 Builder.defineMacro(
"__HIP_MEMORY_SCOPE_WORKGROUP",
"3");
584 Builder.defineMacro(
"__HIP_MEMORY_SCOPE_AGENT",
"4");
585 Builder.defineMacro(
"__HIP_MEMORY_SCOPE_SYSTEM",
"5");
586 if (LangOpts.CUDAIsDevice)
587 Builder.defineMacro(
"__HIP_DEVICE_COMPILE__");
589 LangOptions::GPUDefaultStreamKind::PerThread)
590 Builder.defineMacro(
"HIP_API_PER_THREAD_DEFAULT_STREAM");
600 Builder.defineMacro(
"__cpp_rtti",
"199711L");
601 if (LangOpts.CXXExceptions)
602 Builder.defineMacro(
"__cpp_exceptions",
"199711L");
605 if (LangOpts.CPlusPlus11) {
606 Builder.defineMacro(
"__cpp_unicode_characters",
"200704L");
607 Builder.defineMacro(
"__cpp_raw_strings",
"200710L");
608 Builder.defineMacro(
"__cpp_unicode_literals",
"200710L");
609 Builder.defineMacro(
"__cpp_user_defined_literals",
"200809L");
610 Builder.defineMacro(
"__cpp_lambdas",
"200907L");
611 Builder.defineMacro(
"__cpp_constexpr", LangOpts.CPlusPlus23 ?
"202211L"
612 : LangOpts.CPlusPlus20 ?
"201907L"
613 : LangOpts.CPlusPlus17 ?
"201603L"
614 : LangOpts.CPlusPlus14 ?
"201304L"
616 Builder.defineMacro(
"__cpp_constexpr_in_decltype",
"201711L");
617 Builder.defineMacro(
"__cpp_range_based_for",
618 LangOpts.CPlusPlus17 ?
"201603L" :
"200907");
619 Builder.defineMacro(
"__cpp_static_assert",
620 LangOpts.CPlusPlus17 ?
"201411L" :
"200410");
621 Builder.defineMacro(
"__cpp_decltype",
"200707L");
622 Builder.defineMacro(
"__cpp_attributes",
"200809L");
623 Builder.defineMacro(
"__cpp_rvalue_references",
"200610L");
624 Builder.defineMacro(
"__cpp_variadic_templates",
"200704L");
625 Builder.defineMacro(
"__cpp_initializer_lists",
"200806L");
626 Builder.defineMacro(
"__cpp_delegating_constructors",
"200604L");
627 Builder.defineMacro(
"__cpp_nsdmi",
"200809L");
628 Builder.defineMacro(
"__cpp_inheriting_constructors",
"201511L");
629 Builder.defineMacro(
"__cpp_ref_qualifiers",
"200710L");
630 Builder.defineMacro(
"__cpp_alias_templates",
"200704L");
632 if (LangOpts.ThreadsafeStatics)
633 Builder.defineMacro(
"__cpp_threadsafe_static_init",
"200806L");
636 if (LangOpts.CPlusPlus14) {
637 Builder.defineMacro(
"__cpp_binary_literals",
"201304L");
638 Builder.defineMacro(
"__cpp_digit_separators",
"201309L");
639 Builder.defineMacro(
"__cpp_init_captures",
640 LangOpts.CPlusPlus20 ?
"201803L" :
"201304L");
641 Builder.defineMacro(
"__cpp_generic_lambdas",
642 LangOpts.CPlusPlus20 ?
"201707L" :
"201304L");
643 Builder.defineMacro(
"__cpp_decltype_auto",
"201304L");
644 Builder.defineMacro(
"__cpp_return_type_deduction",
"201304L");
645 Builder.defineMacro(
"__cpp_aggregate_nsdmi",
"201304L");
646 Builder.defineMacro(
"__cpp_variable_templates",
"201304L");
648 if (LangOpts.SizedDeallocation)
649 Builder.defineMacro(
"__cpp_sized_deallocation",
"201309L");
652 if (LangOpts.CPlusPlus17) {
653 Builder.defineMacro(
"__cpp_hex_float",
"201603L");
654 Builder.defineMacro(
"__cpp_inline_variables",
"201606L");
655 Builder.defineMacro(
"__cpp_noexcept_function_type",
"201510L");
656 Builder.defineMacro(
"__cpp_capture_star_this",
"201603L");
657 Builder.defineMacro(
"__cpp_if_constexpr",
"201606L");
658 Builder.defineMacro(
"__cpp_deduction_guides",
"201703L");
659 Builder.defineMacro(
"__cpp_template_auto",
"201606L");
660 Builder.defineMacro(
"__cpp_namespace_attributes",
"201411L");
661 Builder.defineMacro(
"__cpp_enumerator_attributes",
"201411L");
662 Builder.defineMacro(
"__cpp_nested_namespace_definitions",
"201411L");
663 Builder.defineMacro(
"__cpp_variadic_using",
"201611L");
664 Builder.defineMacro(
"__cpp_aggregate_bases",
"201603L");
665 Builder.defineMacro(
"__cpp_structured_bindings",
"201606L");
666 Builder.defineMacro(
"__cpp_nontype_template_args",
668 Builder.defineMacro(
"__cpp_fold_expressions",
"201603L");
669 Builder.defineMacro(
"__cpp_guaranteed_copy_elision",
"201606L");
670 Builder.defineMacro(
"__cpp_nontype_template_parameter_auto",
"201606L");
672 if (LangOpts.AlignedAllocation && !LangOpts.AlignedAllocationUnavailable)
673 Builder.defineMacro(
"__cpp_aligned_new",
"201606L");
674 if (LangOpts.RelaxedTemplateTemplateArgs)
675 Builder.defineMacro(
"__cpp_template_template_args",
"201611L");
678 if (LangOpts.CPlusPlus20) {
679 Builder.defineMacro(
"__cpp_aggregate_paren_init",
"201902L");
684 Builder.defineMacro(
"__cpp_concepts",
"201907L");
685 Builder.defineMacro(
"__cpp_conditional_explicit",
"201806L");
687 Builder.defineMacro(
"__cpp_constexpr_dynamic_alloc",
"201907L");
688 Builder.defineMacro(
"__cpp_constinit",
"201907L");
689 Builder.defineMacro(
"__cpp_impl_coroutine",
"201902L");
690 Builder.defineMacro(
"__cpp_designated_initializers",
"201707L");
691 Builder.defineMacro(
"__cpp_impl_three_way_comparison",
"201907L");
693 Builder.defineMacro(
"__cpp_using_enum",
"201907L");
696 if (LangOpts.CPlusPlus23) {
697 Builder.defineMacro(
"__cpp_implicit_move",
"202011L");
698 Builder.defineMacro(
"__cpp_size_t_suffix",
"202011L");
699 Builder.defineMacro(
"__cpp_if_consteval",
"202106L");
700 Builder.defineMacro(
"__cpp_multidimensional_subscript",
"202211L");
705 if (LangOpts.CPlusPlus11)
706 Builder.defineMacro(
"__cpp_static_call_operator",
"202207L");
707 Builder.defineMacro(
"__cpp_named_character_escapes",
"202207L");
710 Builder.defineMacro(
"__cpp_char8_t",
"202207L");
711 Builder.defineMacro(
"__cpp_impl_destroying_delete",
"201806L");
722 auto defineOpenCLExtMacro = [&](llvm::StringRef Name,
auto... OptArgs) {
727 Builder.defineMacro(Name);
729#define OPENCL_GENERIC_EXTENSION(Ext, ...) \
730 defineOpenCLExtMacro(#Ext, __VA_ARGS__);
731#include "clang/Basic/OpenCLExtensions.def"
734 Builder.defineMacro(
"__opencl_c_int64");
743 Builder.defineMacro(
"__llvm__");
744 Builder.defineMacro(
"__clang__");
746#define TOSTR(X) TOSTR2(X)
747 Builder.defineMacro(
"__clang_major__",
TOSTR(CLANG_VERSION_MAJOR));
748 Builder.defineMacro(
"__clang_minor__",
TOSTR(CLANG_VERSION_MINOR));
749 Builder.defineMacro(
"__clang_patchlevel__",
TOSTR(CLANG_VERSION_PATCHLEVEL));
752 Builder.defineMacro(
"__clang_version__",
753 "\"" CLANG_VERSION_STRING
" "
756 if (LangOpts.GNUCVersion != 0) {
759 unsigned GNUCMajor = LangOpts.GNUCVersion / 100 / 100;
760 unsigned GNUCMinor = LangOpts.GNUCVersion / 100 % 100;
761 unsigned GNUCPatch = LangOpts.GNUCVersion % 100;
762 Builder.defineMacro(
"__GNUC__", Twine(GNUCMajor));
763 Builder.defineMacro(
"__GNUC_MINOR__", Twine(GNUCMinor));
764 Builder.defineMacro(
"__GNUC_PATCHLEVEL__", Twine(GNUCPatch));
765 Builder.defineMacro(
"__GXX_ABI_VERSION",
"1002");
767 if (LangOpts.CPlusPlus) {
768 Builder.defineMacro(
"__GNUG__", Twine(GNUCMajor));
769 Builder.defineMacro(
"__GXX_WEAK__");
774 Builder.defineMacro(
"__ATOMIC_RELAXED",
"0");
775 Builder.defineMacro(
"__ATOMIC_CONSUME",
"1");
776 Builder.defineMacro(
"__ATOMIC_ACQUIRE",
"2");
777 Builder.defineMacro(
"__ATOMIC_RELEASE",
"3");
778 Builder.defineMacro(
"__ATOMIC_ACQ_REL",
"4");
779 Builder.defineMacro(
"__ATOMIC_SEQ_CST",
"5");
788 "Invalid OpenCL memory scope enum definition");
789 Builder.defineMacro(
"__OPENCL_MEMORY_SCOPE_WORK_ITEM",
"0");
790 Builder.defineMacro(
"__OPENCL_MEMORY_SCOPE_WORK_GROUP",
"1");
791 Builder.defineMacro(
"__OPENCL_MEMORY_SCOPE_DEVICE",
"2");
792 Builder.defineMacro(
"__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES",
"3");
793 Builder.defineMacro(
"__OPENCL_MEMORY_SCOPE_SUB_GROUP",
"4");
796 Builder.defineMacro(
"__PRAGMA_REDEFINE_EXTNAME",
"1");
800 Builder.defineMacro(
"__VERSION__",
"\"" +
806 if (!LangOpts.GNUMode && !LangOpts.MSVCCompat)
807 Builder.defineMacro(
"__STRICT_ANSI__");
809 if (LangOpts.GNUCVersion && LangOpts.CPlusPlus11)
810 Builder.defineMacro(
"__GXX_EXPERIMENTAL_CXX0X__");
814 Builder.defineMacro(
"__OBJC2__");
816 if (LangOpts.ObjCExceptions)
817 Builder.defineMacro(
"OBJC_ZEROCOST_EXCEPTIONS");
821 Builder.defineMacro(
"__OBJC_GC__");
824 Builder.defineMacro(
"__NEXT_RUNTIME__");
828 std::string versionString =
"1";
832 if (version >= VersionTuple(2, 0))
833 Builder.defineMacro(
"__OBJC_GNUSTEP_RUNTIME_ABI__",
"20");
836 "__OBJC_GNUSTEP_RUNTIME_ABI__",
837 "1" + Twine(std::min(8U, version.getMinor().value_or(0))));
842 unsigned minor = tuple.getMinor().value_or(0);
843 unsigned subminor = tuple.getSubminor().value_or(0);
844 Builder.defineMacro(
"__OBJFW_RUNTIME_ABI__",
845 Twine(tuple.getMajor() * 10000 + minor * 100 +
849 Builder.defineMacro(
"IBOutlet",
"__attribute__((iboutlet))");
850 Builder.defineMacro(
"IBOutletCollection(ClassName)",
851 "__attribute__((iboutletcollection(ClassName)))");
852 Builder.defineMacro(
"IBAction",
"void)__attribute__((ibaction)");
853 Builder.defineMacro(
"IBInspectable",
"");
854 Builder.defineMacro(
"IB_DESIGNABLE",
"");
859 Builder.defineMacro(
"__OBJC_BOOL_IS_BOOL",
862 if (LangOpts.CPlusPlus)
867 if (!LangOpts.NoConstantCFStrings)
868 Builder.defineMacro(
"__CONSTANT_CFSTRINGS__");
871 Builder.defineMacro(
"OBJC_NEW_PROPERTIES");
873 if (LangOpts.PascalStrings)
874 Builder.defineMacro(
"__PASCAL_STRINGS__");
876 if (LangOpts.Blocks) {
877 Builder.defineMacro(
"__block",
"__attribute__((__blocks__(byref)))");
878 Builder.defineMacro(
"__BLOCKS__");
881 if (!LangOpts.MSVCCompat && LangOpts.Exceptions)
882 Builder.defineMacro(
"__EXCEPTIONS");
883 if (LangOpts.GNUCVersion && LangOpts.RTTI)
884 Builder.defineMacro(
"__GXX_RTTI");
887 Builder.defineMacro(
"__USING_SJLJ_EXCEPTIONS__");
889 Builder.defineMacro(
"__SEH__");
892 Builder.defineMacro(
"__ARM_DWARF_EH__");
894 if (LangOpts.Deprecated)
895 Builder.defineMacro(
"__DEPRECATED");
897 if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus)
898 Builder.defineMacro(
"__private_extern__",
"extern");
900 if (LangOpts.MicrosoftExt) {
901 if (LangOpts.WChar) {
903 Builder.defineMacro(
"_WCHAR_T_DEFINED");
904 Builder.defineMacro(
"_NATIVE_WCHAR_T_DEFINED");
911 Builder.defineMacro(
"__clang_literal_encoding__",
"\"UTF-8\"");
915 Builder.defineMacro(
"__clang_wide_literal_encoding__",
"\"UTF-32\"");
920 Builder.defineMacro(
"__clang_wide_literal_encoding__",
"\"UTF-16\"");
923 if (LangOpts.Optimize)
924 Builder.defineMacro(
"__OPTIMIZE__");
925 if (LangOpts.OptimizeSize)
926 Builder.defineMacro(
"__OPTIMIZE_SIZE__");
928 if (LangOpts.FastMath)
929 Builder.defineMacro(
"__FAST_MATH__");
938 Builder.defineMacro(
"__ORDER_LITTLE_ENDIAN__",
"1234");
939 Builder.defineMacro(
"__ORDER_BIG_ENDIAN__",
"4321");
940 Builder.defineMacro(
"__ORDER_PDP_ENDIAN__",
"3412");
942 Builder.defineMacro(
"__BYTE_ORDER__",
"__ORDER_BIG_ENDIAN__");
943 Builder.defineMacro(
"__BIG_ENDIAN__");
945 Builder.defineMacro(
"__BYTE_ORDER__",
"__ORDER_LITTLE_ENDIAN__");
946 Builder.defineMacro(
"__LITTLE_ENDIAN__");
951 Builder.defineMacro(
"_LP64");
952 Builder.defineMacro(
"__LP64__");
957 Builder.defineMacro(
"_ILP32");
958 Builder.defineMacro(
"__ILP32__");
962 assert(TI.
getCharWidth() == 8 &&
"Only support 8-bit char so far");
963 Builder.defineMacro(
"__CHAR_BIT__", Twine(TI.
getCharWidth()));
965 Builder.defineMacro(
"__BOOL_WIDTH__", Twine(TI.
getBoolWidth()));
966 Builder.defineMacro(
"__SHRT_WIDTH__", Twine(TI.
getShortWidth()));
967 Builder.defineMacro(
"__INT_WIDTH__", Twine(TI.
getIntWidth()));
968 Builder.defineMacro(
"__LONG_WIDTH__", Twine(TI.
getLongWidth()));
972 assert(BitIntMaxWidth <= llvm::IntegerType::MAX_INT_BITS &&
973 "Target defined a max bit width larger than LLVM can support!");
975 "Target defined a max bit width smaller than the C standard allows!");
976 Builder.defineMacro(
"__BITINT_MAXWIDTH__", Twine(BitIntMaxWidth));
978 DefineTypeSize(
"__SCHAR_MAX__", TargetInfo::SignedChar, TI, Builder);
979 DefineTypeSize(
"__SHRT_MAX__", TargetInfo::SignedShort, TI, Builder);
980 DefineTypeSize(
"__INT_MAX__", TargetInfo::SignedInt, TI, Builder);
981 DefineTypeSize(
"__LONG_MAX__", TargetInfo::SignedLong, TI, Builder);
982 DefineTypeSize(
"__LONG_LONG_MAX__", TargetInfo::SignedLongLong, TI, Builder);
1017 Builder.defineMacro(
"__INTMAX_C_SUFFIX__",
1021 Builder.defineMacro(
"__UINTMAX_C_SUFFIX__",
1042 "uintptr_t and intptr_t have different widths?");
1045 "uintmax_t and intmax_t have different widths?");
1054 Builder.defineMacro(
"__POINTER_WIDTH__",
1058 Builder.defineMacro(
"__BIGGEST_ALIGNMENT__",
1061 if (!LangOpts.CharIsSigned)
1062 Builder.defineMacro(
"__CHAR_UNSIGNED__");
1065 Builder.defineMacro(
"__WCHAR_UNSIGNED__");
1068 Builder.defineMacro(
"__WINT_UNSIGNED__");
1133 if (!LangOpts.MathErrno)
1134 Builder.defineMacro(
"__NO_MATH_ERRNO__");
1136 if (LangOpts.FastMath || LangOpts.FiniteMathOnly)
1137 Builder.defineMacro(
"__FINITE_MATH_ONLY__",
"1");
1139 Builder.defineMacro(
"__FINITE_MATH_ONLY__",
"0");
1141 if (LangOpts.GNUCVersion) {
1142 if (LangOpts.GNUInline || LangOpts.CPlusPlus)
1143 Builder.defineMacro(
"__GNUC_GNU_INLINE__");
1145 Builder.defineMacro(
"__GNUC_STDC_INLINE__");
1149 Builder.defineMacro(
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL",
"1");
1152 auto addLockFreeMacros = [&](
const llvm::Twine &Prefix) {
1154#define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \
1155 Builder.defineMacro(Prefix + #TYPE "_LOCK_FREE", \
1156 getLockFreeValue(TI.get##Type##Width(), TI));
1168 Builder.defineMacro(
1169 Prefix +
"POINTER_LOCK_FREE",
1171#undef DEFINE_LOCK_FREE_MACRO
1173 addLockFreeMacros(
"__CLANG_ATOMIC_");
1174 if (LangOpts.GNUCVersion)
1175 addLockFreeMacros(
"__GCC_ATOMIC_");
1177 if (LangOpts.NoInlineDefine)
1178 Builder.defineMacro(
"__NO_INLINE__");
1180 if (
unsigned PICLevel = LangOpts.PICLevel) {
1181 Builder.defineMacro(
"__PIC__", Twine(PICLevel));
1182 Builder.defineMacro(
"__pic__", Twine(PICLevel));
1184 Builder.defineMacro(
"__PIE__", Twine(PICLevel));
1185 Builder.defineMacro(
"__pie__", Twine(PICLevel));
1190 Builder.defineMacro(
"__FLT_RADIX__",
"2");
1191 Builder.defineMacro(
"__DECIMAL_DIG__",
"__LDBL_DECIMAL_DIG__");
1194 Builder.defineMacro(
"__SSP__");
1196 Builder.defineMacro(
"__SSP_STRONG__",
"2");
1198 Builder.defineMacro(
"__SSP_ALL__",
"3");
1201 Builder.defineMacro(
"__clang_analyzer__");
1203 if (LangOpts.FastRelaxedMath)
1204 Builder.defineMacro(
"__FAST_RELAXED_MATH__");
1208 Builder.defineMacro(
"__weak",
"__attribute__((objc_gc(weak)))");
1209 Builder.defineMacro(
"__strong",
"__attribute__((objc_gc(strong)))");
1210 Builder.defineMacro(
"__autoreleasing",
"");
1211 Builder.defineMacro(
"__unsafe_unretained",
"");
1212 }
else if (LangOpts.ObjC) {
1213 Builder.defineMacro(
"__weak",
"__attribute__((objc_ownership(weak)))");
1214 Builder.defineMacro(
"__strong",
"__attribute__((objc_ownership(strong)))");
1215 Builder.defineMacro(
"__autoreleasing",
1216 "__attribute__((objc_ownership(autoreleasing)))");
1217 Builder.defineMacro(
"__unsafe_unretained",
1218 "__attribute__((objc_ownership(none)))");
1224 Builder.defineMacro(
"__nonnull",
"_Nonnull");
1225 Builder.defineMacro(
"__null_unspecified",
"_Null_unspecified");
1226 Builder.defineMacro(
"__nullable",
"_Nullable");
1232 Builder.defineMacro(
"__APPLE_EMBEDDED_SIMULATOR__",
"1");
1240 if (!LangOpts.OpenMPSimd) {
1241 switch (LangOpts.OpenMP) {
1245 Builder.defineMacro(
"_OPENMP",
"201107");
1248 Builder.defineMacro(
"_OPENMP",
"201307");
1251 Builder.defineMacro(
"_OPENMP",
"201511");
1254 Builder.defineMacro(
"_OPENMP",
"202011");
1257 Builder.defineMacro(
"_OPENMP",
"202111");
1262 Builder.defineMacro(
"_OPENMP",
"201811");
1268 if (LangOpts.CUDAIsDevice && !LangOpts.HIP) {
1271 Builder.defineMacro(
"__CUDA_ARCH__");
1276 if (LangOpts.CUDADeviceApproxTranscendentals || LangOpts.FastMath) {
1277 Builder.defineMacro(
"__CLANG_CUDA_APPROX_TRANSCENDENTALS__");
1282 if (LangOpts.SYCLIsDevice) {
1283 Builder.defineMacro(
"__SYCL_DEVICE_ONLY__",
"1");
1287 if (LangOpts.OpenCL) {
1291 Builder.defineMacro(
"__IMAGE_SUPPORT__");
1294 if (TI.
hasInt128Type() && LangOpts.CPlusPlus && LangOpts.GNUMode) {
1298 Builder.defineMacro(
"__GLIBCXX_TYPE_INT_N_0",
"__int128");
1299 Builder.defineMacro(
"__GLIBCXX_BITSIZE_INT_N_0",
"128");
1304 Builder.defineMacro(
"__ELF__");
1317 std::string PredefineBuffer;
1318 PredefineBuffer.reserve(4080);
1319 llvm::raw_string_ostream Predefines(PredefineBuffer);
1325 Builder.append(
"# 1 \"<built-in>\" 3");
1331 if ((LangOpts.CUDA || LangOpts.OpenMPIsDevice || LangOpts.SYCLIsDevice) &&
1341 if (LangOpts.ObjC && LangOpts.CPlusPlus &&
1342 (LangOpts.ObjCAutoRefCount || LangOpts.ObjCWeak)) {
1363 Builder.append(
"# 1 \"<command line>\" 1");
1366 for (
unsigned i = 0, e = InitOpts.
Macros.size(); i != e; ++i) {
1367 if (InitOpts.
Macros[i].second)
1368 Builder.undefineMacro(InitOpts.
Macros[i].first);
1375 Builder.append(
"# 1 \"<built-in>\" 2");
1379 for (
unsigned i = 0, e = InitOpts.
MacroIncludes.size(); i != e; ++i)
1388 for (
unsigned i = 0, e = InitOpts.
Includes.size(); i != e; ++i) {
1389 const std::string &Path = InitOpts.
Includes[i];
Defines the clang::FileManager interface and associated types.
Defines helper utilities for supporting the HLSL runtime environment.
static void AddImplicitIncludePCH(MacroBuilder &Builder, Preprocessor &PP, const PCHContainerReader &PCHContainerRdr, StringRef ImplicitIncludePCH)
Add an implicit #include using the original file used to generate a PCH file.
static void AddImplicitInclude(MacroBuilder &Builder, StringRef File)
AddImplicitInclude - Add an implicit #include of the specified file to the predefines buffer.
static void DefineTypeWidth(const Twine &MacroName, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
static bool MacroBodyEndsInBackslash(StringRef MacroBody)
static void DefineTypeSizeof(StringRef MacroName, unsigned BitWidth, const TargetInfo &TI, MacroBuilder &Builder)
static void InitializePredefinedMacros(const TargetInfo &TI, const LangOptions &LangOpts, const FrontendOptions &FEOpts, const PreprocessorOptions &PPOpts, MacroBuilder &Builder)
static void DefineFloatMacros(MacroBuilder &Builder, StringRef Prefix, const llvm::fltSemantics *Sem, StringRef Ext)
static void DefineTypeSize(const Twine &MacroName, unsigned TypeWidth, StringRef ValSuffix, bool isSigned, MacroBuilder &Builder)
DefineTypeSize - Emit a macro to the predefines buffer that declares a macro named MacroName with the...
static void DefineExactWidthIntType(TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
static void DefineExactWidthIntTypeSize(TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
void InitializeOpenCLFeatureTestMacros(const TargetInfo &TI, const LangOptions &Opts, MacroBuilder &Builder)
InitializeOpenCLFeatureTestMacros - Define OpenCL macros based on target settings and language versio...
static void AddImplicitIncludeMacros(MacroBuilder &Builder, StringRef File)
static void AddObjCXXARCLibstdcxxDefines(const LangOptions &LangOpts, MacroBuilder &Builder)
Add definitions required for a smooth interaction between Objective-C++ automated reference counting ...
static void DefineFmt(const Twine &Prefix, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
static void DefineLeastWidthIntType(unsigned TypeWidth, bool IsSigned, const TargetInfo &TI, MacroBuilder &Builder)
static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, MacroBuilder &Builder)
Initialize the predefined C++ language feature test macros defined in ISO/IEC JTC1/SC22/WG21 (C++) SD...
static const char * getLockFreeValue(unsigned TypeWidth, const TargetInfo &TI)
Get the value the ATOMIC_*_LOCK_FREE macro should have for a type with the specified properties.
static void DefineTypeSizeAndWidth(const Twine &Prefix, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
static void DefineType(const Twine &MacroName, TargetInfo::IntType Ty, MacroBuilder &Builder)
static T PickFP(const llvm::fltSemantics *Sem, T IEEEHalfVal, T IEEESingleVal, T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal, T IEEEQuadVal)
PickFP - This is used to pick a value based on the FP semantics of the specified FP model.
static void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags)
#define DEFINE_LOCK_FREE_MACRO(TYPE, Type)
static void InitializeStandardPredefinedMacros(const TargetInfo &TI, const LangOptions &LangOpts, const FrontendOptions &FEOpts, MacroBuilder &Builder)
static void DefineFastIntType(unsigned TypeWidth, bool IsSigned, const TargetInfo &TI, MacroBuilder &Builder)
Defines the clang::MacroBuilder utility class.
Defines the clang::Preprocessor interface.
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
Defines the SourceManager interface.
Provides definitions for the atomic synchronization scopes.
Defines version macros and version-related utility functions for Clang.
StringRef getOriginalSourceFile()
Retrieve the name of the original source file name for the primary module file.
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
FrontendOptions - Options for controlling the behavior of the frontend.
frontend::ActionKind ProgramAction
The frontend action to perform.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
clang::ObjCRuntime ObjCRuntime
bool hasSjLjExceptions() const
bool hasDWARFExceptions() const
bool hasSEHExceptions() const
GPUDefaultStreamKind GPUDefaultStream
The default stream kind used for HIP kernel launching.
bool isNeXTFamily() const
Is this runtime basically of the NeXT family of runtimes?
const VersionTuple & getVersion() const
bool isNonFragile() const
Does this runtime follow the set of implied behaviors for a "non-fragile" ABI?
@ GNUstep
'gnustep' is the modern non-fragile GNUstep runtime.
@ ObjFW
'objfw' is the Objective-C runtime included in ObjFW
static bool isOpenCLOptionAvailableIn(const LangOptions &LO, Args &&... args)
This abstract interface provides operations for unwrapping containers for serialized ASTs (precompile...
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
std::vector< std::string > MacroIncludes
std::vector< std::string > Includes
std::pair< unsigned, bool > PrecompiledPreambleBytes
If non-zero, the implicit PCH include is actually a precompiled preamble that covers this number of b...
ObjCXXARCStandardLibraryKind ObjCXXARCStandardLibrary
The Objective-C++ ARC standard library that we should support, by providing appropriate definitions t...
std::string ImplicitPCHInclude
The implicit PCH included at the start of the translation unit, or empty.
bool UsePredefines
Initialize the preprocessor with the compiler and target specific predefines.
bool SetUpStaticAnalyzer
Set up preprocessor for RunAnalysis action.
std::vector< std::pair< std::string, bool > > Macros
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
const TargetInfo * getAuxTargetInfo() const
const TargetInfo & getTargetInfo() const
FileManager & getFileManager() const
PreprocessorOptions & getPreprocessorOpts() const
Retrieve the preprocessor options used to initialize this preprocessor.
void setPredefines(std::string P)
Set the predefines for this Preprocessor.
void setSkipMainFilePreamble(unsigned Bytes, bool StartOfLine)
Instruct the preprocessor to skip part of the main source file.
const LangOptions & getLangOpts() const
DiagnosticsEngine & getDiagnostics() const
Exposes information about the current target.
unsigned getNewAlign() const
Return the largest alignment for which a suitably-sized allocation with '::operator new(size_t)' is g...
unsigned getShortWidth() const
Return the size of 'signed short' and 'unsigned short' for this target, in bits.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
IntType getUIntPtrType() const
IntType getInt64Type() const
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const
Return the smallest integer type with at least the specified width.
virtual bool hasFeatureEnabled(const llvm::StringMap< bool > &Features, StringRef Name) const
Check if target has a given feature enabled.
virtual size_t getMaxBitIntWidth() const
unsigned getTypeWidth(IntType T) const
Return the width (in bits) of the specified integer type enum.
uint64_t getPointerWidth(LangAS AddrSpace) const
Return the width of pointers on this target, for the specified address space.
static bool isTypeSigned(IntType T)
Returns true if the type is signed; false otherwise.
bool useSignedCharForObjCBool() const
Check if the Objective-C built-in boolean type should be signed char.
virtual bool hasInt128Type() const
Determine whether the __int128 type is supported on this target.
IntType getSigAtomicType() const
virtual bool hasFloat16Type() const
Determine whether the _Float16 type is supported on this target.
unsigned getIntWidth() const
getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for this target,...
IntType getPtrDiffType(LangAS AddrSpace) const
bool isLittleEndian() const
unsigned getFloatWidth() const
getFloatWidth/Align/Format - Return the size/align/format of 'float'.
IntType getSizeType() const
IntType getWIntType() const
virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const =0
===-— Other target property query methods -----------------------—===//
const llvm::fltSemantics & getDoubleFormat() const
static const char * getTypeName(IntType T)
Return the user string for the specified integer type enum.
unsigned getLongLongWidth() const
getLongLongWidth/Align - Return the size of 'signed long long' and 'unsigned long long' for this targ...
virtual bool hasBuiltinAtomic(uint64_t AtomicSizeInBits, uint64_t AlignmentInBits) const
Returns true if the given target supports lock-free atomic operations at the specified width and alig...
IntType getIntPtrType() const
IntType getInt16Type() const
const llvm::fltSemantics & getHalfFormat() const
llvm::StringMap< bool > & getSupportedOpenCLOpts()
Get supported OpenCL extensions and optional core features.
IntType getWCharType() const
IntType getUInt16Type() const
const char * getUserLabelPrefix() const
Returns the default value of the USER_LABEL_PREFIX macro, which is the prefix given to user symbols b...
IntType getChar16Type() const
IntType getChar32Type() const
IntType getUInt64Type() const
const llvm::fltSemantics & getLongDoubleFormat() const
const llvm::fltSemantics & getFloatFormat() const
const char * getTypeConstantSuffix(IntType T) const
Return the constant suffix for the specified integer type enum.
unsigned getDoubleWidth() const
getDoubleWidth/Align/Format - Return the size/align/format of 'double'.
unsigned getSuitableAlign() const
Return the alignment that is the largest alignment ever used for any scalar/SIMD data type on the tar...
unsigned getBoolWidth() const
Return the size of '_Bool' and C++ 'bool' for this target, in bits.
unsigned getCharWidth() const
unsigned getLongWidth() const
getLongWidth/Align - Return the size of 'signed long' and 'unsigned long' for this target,...
IntType getIntMaxType() const
static const char * getTypeFormatModifier(IntType T)
Return the printf format modifier for the specified integer type enum.
IntType getUIntMaxType() const
unsigned getLongDoubleWidth() const
getLongDoubleWidth/Align/Format - Return the size/align/format of 'long double'.
Defines the clang::TargetInfo interface.
@ RewriteObjC
ObjC->C Rewriter.
@ ARCXX_libstdcxx
libstdc++
LLVM_READONLY bool isWhitespace(unsigned char c)
Return true if this character is horizontal or vertical ASCII whitespace: ' ', '\t',...
void InitializePreprocessor(Preprocessor &PP, const PreprocessorOptions &PPOpts, const PCHContainerReader &PCHContainerRdr, const FrontendOptions &FEOpts)
InitializePreprocessor - Initialize the preprocessor getting it and the environment ready to process ...
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
std::string getClangFullCPPVersion()
Retrieves a string representing the complete clang version suitable for use in the CPP VERSION macro,...
IntType
===-— Target Data Type Query Methods ----------------------------—===//