27 #include "llvm/ADT/APFloat.h"
28 #include "llvm/Support/FileSystem.h"
29 #include "llvm/Support/MemoryBuffer.h"
30 #include "llvm/Support/Path.h"
31 using namespace clang;
34 while (!MacroBody.empty() &&
isWhitespace(MacroBody.back()))
35 MacroBody = MacroBody.drop_back();
36 return !MacroBody.empty() && MacroBody.back() ==
'\\';
44 std::pair<StringRef, StringRef> MacroPair = Macro.split(
'=');
45 StringRef MacroName = MacroPair.first;
46 StringRef MacroBody = MacroPair.second;
47 if (MacroName.size() != Macro.size()) {
49 StringRef::size_type
End = MacroBody.find_first_of(
"\n\r");
50 if (End != StringRef::npos)
51 Diags.
Report(diag::warn_fe_macro_contains_embedded_newline)
53 MacroBody = MacroBody.substr(0, End);
58 Builder.
defineMacro(MacroName, Twine(MacroBody) +
"\\\n");
72 Builder.
append(Twine(
"#include \"") + File +
"\"");
76 Builder.
append(Twine(
"#__include_macros \"") + File +
"\"");
84 StringRef ImplicitIncludePTH) {
91 << ImplicitIncludePTH;
102 StringRef ImplicitIncludePCH) {
103 std::string OriginalFile =
106 if (OriginalFile.empty())
114 template <
typename T>
115 static T
PickFP(
const llvm::fltSemantics *Sem, T IEEESingleVal,
116 T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal,
118 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEsingle)
119 return IEEESingleVal;
120 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEdouble)
121 return IEEEDoubleVal;
122 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::x87DoubleExtended)
123 return X87DoubleExtendedVal;
124 if (Sem == (
const llvm::fltSemantics*)&llvm::APFloat::PPCDoubleDouble)
125 return PPCDoubleDoubleVal;
126 assert(Sem == (
const llvm::fltSemantics*)&llvm::APFloat::IEEEquad);
131 const llvm::fltSemantics *Sem, StringRef Ext) {
132 const char *DenormMin, *Epsilon, *Max, *Min;
133 DenormMin =
PickFP(Sem,
"1.40129846e-45",
"4.9406564584124654e-324",
134 "3.64519953188247460253e-4951",
135 "4.94065645841246544176568792868221e-324",
136 "6.47517511943802511092443895822764655e-4966");
137 int Digits =
PickFP(Sem, 6, 15, 18, 31, 33);
138 int DecimalDigits =
PickFP(Sem, 9, 17, 21, 33, 36);
139 Epsilon =
PickFP(Sem,
"1.19209290e-7",
"2.2204460492503131e-16",
140 "1.08420217248550443401e-19",
141 "4.94065645841246544176568792868221e-324",
142 "1.92592994438723585305597794258492732e-34");
143 int MantissaDigits =
PickFP(Sem, 24, 53, 64, 106, 113);
144 int Min10Exp =
PickFP(Sem, -37, -307, -4931, -291, -4931);
145 int Max10Exp =
PickFP(Sem, 38, 308, 4932, 308, 4932);
146 int MinExp =
PickFP(Sem, -125, -1021, -16381, -968, -16381);
147 int MaxExp =
PickFP(Sem, 128, 1024, 16384, 1024, 16384);
148 Min =
PickFP(Sem,
"1.17549435e-38",
"2.2250738585072014e-308",
149 "3.36210314311209350626e-4932",
150 "2.00416836000897277799610805135016e-292",
151 "3.36210314311209350626267781732175260e-4932");
152 Max =
PickFP(Sem,
"3.40282347e+38",
"1.7976931348623157e+308",
153 "1.18973149535723176502e+4932",
154 "1.79769313486231580793728971405301e+308",
155 "1.18973149535723176508575932662800702e+4932");
162 Builder.
defineMacro(DefPrefix +
"DENORM_MIN__", Twine(DenormMin)+Ext);
164 Builder.
defineMacro(DefPrefix +
"DIG__", Twine(Digits));
165 Builder.
defineMacro(DefPrefix +
"DECIMAL_DIG__", Twine(DecimalDigits));
166 Builder.
defineMacro(DefPrefix +
"EPSILON__", Twine(Epsilon)+Ext);
168 Builder.
defineMacro(DefPrefix +
"HAS_QUIET_NAN__");
169 Builder.
defineMacro(DefPrefix +
"MANT_DIG__", Twine(MantissaDigits));
171 Builder.
defineMacro(DefPrefix +
"MAX_10_EXP__", Twine(Max10Exp));
172 Builder.
defineMacro(DefPrefix +
"MAX_EXP__", Twine(MaxExp));
173 Builder.
defineMacro(DefPrefix +
"MAX__", Twine(Max)+Ext);
175 Builder.
defineMacro(DefPrefix +
"MIN_10_EXP__",
"("+Twine(Min10Exp)+
")");
176 Builder.
defineMacro(DefPrefix +
"MIN_EXP__",
"("+Twine(MinExp)+
")");
177 Builder.
defineMacro(DefPrefix +
"MIN__", Twine(Min)+Ext);
185 StringRef ValSuffix,
bool isSigned,
187 llvm::APInt MaxVal = isSigned ? llvm::APInt::getSignedMaxValue(TypeWidth)
188 : llvm::APInt::getMaxValue(TypeWidth);
189 Builder.
defineMacro(MacroName, MaxVal.toString(10, isSigned) + ValSuffix);
204 for (
const char *Fmt = IsSigned ?
"di" :
"ouxX"; *Fmt; ++Fmt) {
205 Builder.
defineMacro(Prefix +
"_FMT" + Twine(*Fmt) +
"__",
206 Twine(
"\"") + FmtModifier + Twine(*Fmt) +
"\"");
237 const char *Prefix = IsSigned ?
"__INT" :
"__UINT";
239 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
240 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
243 Builder.
defineMacro(Prefix + Twine(TypeWidth) +
"_C_SUFFIX__", ConstSuffix);
257 const char *Prefix = IsSigned ?
"__INT" :
"__UINT";
258 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
268 const char *Prefix = IsSigned ?
"__INT_LEAST" :
"__UINT_LEAST";
269 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
270 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
271 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
282 const char *Prefix = IsSigned ?
"__INT_FAST" :
"__UINT_FAST";
283 DefineType(Prefix + Twine(TypeWidth) +
"_TYPE__", Ty, Builder);
284 DefineTypeSize(Prefix + Twine(TypeWidth) +
"_MAX__", Ty, TI, Builder);
286 DefineFmt(Prefix + Twine(TypeWidth), Ty, TI, Builder);
293 unsigned InlineWidth) {
296 if (TypeWidth == TypeAlign && (TypeWidth & (TypeWidth - 1)) == 0 &&
297 TypeWidth <= InlineWidth)
308 Builder.
defineMacro(
"_GLIBCXX_PREDEFINED_OBJC_ARC_IS_SCALAR");
317 llvm::raw_string_ostream Out(Result);
319 Out <<
"namespace std {\n"
321 <<
"struct __true_type;\n"
322 <<
"struct __false_type;\n"
325 Out <<
"template<typename _Tp> struct __is_scalar;\n"
328 if (LangOpts.ObjCAutoRefCount) {
329 Out <<
"template<typename _Tp>\n"
330 <<
"struct __is_scalar<__attribute__((objc_ownership(strong))) _Tp> {\n"
331 <<
" enum { __value = 0 };\n"
332 <<
" typedef __false_type __type;\n"
337 if (LangOpts.ObjCWeak) {
338 Out <<
"template<typename _Tp>\n"
339 <<
"struct __is_scalar<__attribute__((objc_ownership(weak))) _Tp> {\n"
340 <<
" enum { __value = 0 };\n"
341 <<
" typedef __false_type __type;\n"
346 if (LangOpts.ObjCAutoRefCount) {
347 Out <<
"template<typename _Tp>\n"
348 <<
"struct __is_scalar<__attribute__((objc_ownership(autoreleasing)))"
350 <<
" enum { __value = 0 };\n"
351 <<
" typedef __false_type __type;\n"
365 if (!LangOpts.MSVCCompat && !LangOpts.TraditionalCPP)
367 if (LangOpts.Freestanding)
372 if (!LangOpts.CPlusPlus) {
374 Builder.
defineMacro(
"__STDC_VERSION__",
"201112L");
375 else if (LangOpts.C99)
376 Builder.
defineMacro(
"__STDC_VERSION__",
"199901L");
377 else if (!LangOpts.GNUMode && LangOpts.Digraphs)
378 Builder.
defineMacro(
"__STDC_VERSION__",
"199409L");
381 if (LangOpts.CPlusPlus1z)
386 else if (LangOpts.CPlusPlus14)
391 else if (LangOpts.CPlusPlus11)
412 if (LangOpts.OpenCL) {
420 switch (LangOpts.OpenCLVersion) {
422 Builder.
defineMacro(
"__OPENCL_C_VERSION__",
"100");
425 Builder.
defineMacro(
"__OPENCL_C_VERSION__",
"110");
428 Builder.
defineMacro(
"__OPENCL_C_VERSION__",
"120");
431 Builder.
defineMacro(
"__OPENCL_C_VERSION__",
"200");
434 llvm_unreachable(
"Unsupported OpenCL version");
441 if (LangOpts.FastRelaxedMath)
445 if (LangOpts.AsmPreprocessor)
458 if (LangOpts.CXXExceptions)
462 if (LangOpts.CPlusPlus11) {
463 Builder.
defineMacro(
"__cpp_unicode_characters",
"200704");
464 Builder.
defineMacro(
"__cpp_raw_strings",
"200710");
465 Builder.
defineMacro(
"__cpp_unicode_literals",
"200710");
466 Builder.
defineMacro(
"__cpp_user_defined_literals",
"200809");
469 LangOpts.CPlusPlus14 ?
"201304" :
"200704");
470 Builder.
defineMacro(
"__cpp_range_based_for",
"200907");
471 Builder.
defineMacro(
"__cpp_static_assert",
"200410");
474 Builder.
defineMacro(
"__cpp_rvalue_references",
"200610");
475 Builder.
defineMacro(
"__cpp_variadic_templates",
"200704");
476 Builder.
defineMacro(
"__cpp_initializer_lists",
"200806");
477 Builder.
defineMacro(
"__cpp_delegating_constructors",
"200604");
479 Builder.
defineMacro(
"__cpp_inheriting_constructors",
"200802");
480 Builder.
defineMacro(
"__cpp_ref_qualifiers",
"200710");
481 Builder.
defineMacro(
"__cpp_alias_templates",
"200704");
485 if (LangOpts.CPlusPlus14) {
486 Builder.
defineMacro(
"__cpp_binary_literals",
"201304");
487 Builder.
defineMacro(
"__cpp_digit_separators",
"201309");
488 Builder.
defineMacro(
"__cpp_init_captures",
"201304");
489 Builder.
defineMacro(
"__cpp_generic_lambdas",
"201304");
490 Builder.
defineMacro(
"__cpp_decltype_auto",
"201304");
491 Builder.
defineMacro(
"__cpp_return_type_deduction",
"201304");
492 Builder.
defineMacro(
"__cpp_aggregate_nsdmi",
"201304");
493 Builder.
defineMacro(
"__cpp_variable_templates",
"201304");
495 if (LangOpts.SizedDeallocation)
496 Builder.
defineMacro(
"__cpp_sized_deallocation",
"201309");
497 if (LangOpts.ConceptsTS)
498 Builder.
defineMacro(
"__cpp_experimental_concepts",
"1");
499 if (LangOpts.Coroutines)
511 #define TOSTR(X) TOSTR2(X)
514 #ifdef CLANG_VERSION_PATCHLEVEL
515 Builder.
defineMacro(
"__clang_patchlevel__",
TOSTR(CLANG_VERSION_PATCHLEVEL));
524 if (!LangOpts.MSVCCompat) {
542 Builder.
defineMacro(
"__PRAGMA_REDEFINE_EXTNAME",
"1");
547 Builder.
defineMacro(
"__VERSION__",
"\"4.2.1 Compatible " +
553 if (!LangOpts.GNUMode && !LangOpts.MSVCCompat)
556 if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus11)
559 if (LangOpts.ObjC1) {
563 if (LangOpts.ObjCExceptions)
578 minor = tuple.
getMinor().getValue();
580 unsigned subminor = 0;
585 Twine(tuple.
getMajor() * 10000 + minor * 100 +
589 Builder.
defineMacro(
"IBOutlet",
"__attribute__((iboutlet))");
590 Builder.
defineMacro(
"IBOutletCollection(ClassName)",
591 "__attribute__((iboutletcollection(ClassName)))");
592 Builder.
defineMacro(
"IBAction",
"void)__attribute__((ibaction)");
597 if (LangOpts.CPlusPlus)
602 if (!LangOpts.NoConstantCFStrings)
608 if (LangOpts.PascalStrings)
611 if (LangOpts.Blocks) {
612 Builder.
defineMacro(
"__block",
"__attribute__((__blocks__(byref)))");
616 if (!LangOpts.MSVCCompat && LangOpts.Exceptions)
618 if (!LangOpts.MSVCCompat && LangOpts.RTTI)
620 if (LangOpts.SjLjExceptions)
623 if (LangOpts.Deprecated)
626 if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus) {
629 Builder.
defineMacro(
"__private_extern__",
"extern");
632 if (LangOpts.MicrosoftExt) {
633 if (LangOpts.WChar) {
640 if (LangOpts.Optimize)
642 if (LangOpts.OptimizeSize)
645 if (LangOpts.FastMath)
655 Builder.
defineMacro(
"__ORDER_LITTLE_ENDIAN__",
"1234");
656 Builder.
defineMacro(
"__ORDER_BIG_ENDIAN__",
"4321");
657 Builder.
defineMacro(
"__ORDER_PDP_ENDIAN__",
"3412");
659 Builder.
defineMacro(
"__BYTE_ORDER__",
"__ORDER_BIG_ENDIAN__");
662 Builder.
defineMacro(
"__BYTE_ORDER__",
"__ORDER_LITTLE_ENDIAN__");
679 assert(TI.
getCharWidth() == 8 &&
"Only support 8-bit char so far");
759 if (!LangOpts.CharIsSigned)
829 char UserLabelPrefix[2] = {TI.
getDataLayout().getGlobalPrefix(), 0};
830 Builder.
defineMacro(
"__USER_LABEL_PREFIX__", UserLabelPrefix);
832 if (LangOpts.FastMath || LangOpts.FiniteMathOnly)
837 if (!LangOpts.MSVCCompat) {
838 if (LangOpts.GNUInline || LangOpts.CPlusPlus)
845 Builder.
defineMacro(
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL",
"1");
849 #define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \
850 Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \
851 getLockFreeValue(TI.get##Type##Width(), \
852 TI.get##Type##Align(), \
863 Builder.
defineMacro(
"__GCC_ATOMIC_POINTER_LOCK_FREE",
867 #undef DEFINE_LOCK_FREE_MACRO
870 if (LangOpts.NoInlineDefine)
873 if (
unsigned PICLevel = LangOpts.PICLevel) {
885 Builder.
defineMacro(
"__DECIMAL_DIG__",
"__LDBL_DECIMAL_DIG__");
898 if (LangOpts.FastRelaxedMath)
903 Builder.
defineMacro(
"__weak",
"__attribute__((objc_gc(weak)))");
904 Builder.
defineMacro(
"__strong",
"__attribute__((objc_gc(strong)))");
907 }
else if (LangOpts.ObjC1) {
908 Builder.
defineMacro(
"__weak",
"__attribute__((objc_ownership(weak)))");
909 Builder.
defineMacro(
"__strong",
"__attribute__((objc_ownership(strong)))");
911 "__attribute__((objc_ownership(autoreleasing)))");
913 "__attribute__((objc_ownership(none)))");
920 Builder.
defineMacro(
"__null_unspecified",
"_Null_unspecified");
930 switch (LangOpts.OpenMP) {
946 if (LangOpts.CUDAIsDevice) {
954 if (LangOpts.CUDADeviceApproxTranscendentals || LangOpts.FastMath) {
955 Builder.
defineMacro(
"__CLANG_CUDA_APPROX_TRANSCENDENTALS__");
959 if (LangOpts.OpenCL) {
960 #define OPENCLEXT(Ext) \
961 if (TI.getSupportedOpenCLOpts().is_##Ext##_supported( \
962 LangOpts.OpenCLVersion)) \
963 Builder.defineMacro(#Ext);
964 #include "clang/Basic/OpenCLExtensions.def"
979 std::string PredefineBuffer;
980 PredefineBuffer.reserve(4080);
981 llvm::raw_string_ostream Predefines(PredefineBuffer);
988 Builder.
append(
"# 1 \"<built-in>\" 3");
1000 if (LangOpts.ObjC1 && LangOpts.CPlusPlus &&
1001 (LangOpts.ObjCAutoRefCount || LangOpts.ObjCWeak)) {
1023 Builder.
append(
"# 1 \"<command line>\" 1");
1026 for (
unsigned i = 0, e = InitOpts.
Macros.size(); i != e; ++i) {
1027 if (InitOpts.
Macros[i].second)
1036 Builder.
append(
"# 1 \"<built-in>\" 2");
1040 for (
unsigned i = 0, e = InitOpts.
MacroIncludes.size(); i != e; ++i)
1051 for (
unsigned i = 0, e = InitOpts.
Includes.size(); i != e; ++i) {
1052 const std::string &Path = InitOpts.
Includes[i];
std::vector< std::pair< std::string, bool > > Macros
Defines the clang::MacroBuilder utility class.
Represents a version number in the form major[.minor[.subminor[.build]]].
Defines the clang::FileManager interface and associated types.
static LLVM_READONLY bool isWhitespace(unsigned char c)
Return true if this character is horizontal or vertical ASCII whitespace: ' ', '\t', '\f', '\v', '\n', '\r'.
Defines the SourceManager interface.
static void DefineFmt(const Twine &Prefix, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
IntType getSizeType() const
std::vector< std::string > Includes
Optional< unsigned > getMinor() const
Retrieve the minor version number, if provided.
IntType getWIntType() const
static void AddImplicitIncludeMacros(MacroBuilder &Builder, StringRef File)
StringRef getOriginalSourceFile()
Retrieve the name of the original source file name for the primary module file.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
std::string ImplicitPTHInclude
The implicit PTH input included at the start of the translation unit, or empty.
static void DefineTypeSizeof(StringRef MacroName, unsigned BitWidth, const TargetInfo &TI, MacroBuilder &Builder)
unsigned getLongDoubleWidth() const
getLongDoubleWidth/Align/Format - Return the size/align/format of 'long double'.
void setPredefines(const char *P)
Set the predefines for this Preprocessor.
unsigned getFloatWidth() const
getFloatWidth/Align/Format - Return the size/align/format of 'float'.
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 AddObjCXXARCLibstdcxxDefines(const LangOptions &LangOpts, MacroBuilder &Builder)
Add definitions required for a smooth interaction between Objective-C++ automated reference counting ...
unsigned getDoubleWidth() const
getDoubleWidth/Align/Format - Return the size/align/format of 'double'.
const char * getTypeConstantSuffix(IntType T) const
Return the constant suffix for the specified integer type enum.
void undefineMacro(const Twine &Name)
Append a #undef line for Name.
const LangOptions & getLangOpts() const
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
FileManager & getFileManager() const
static bool isTypeSigned(IntType T)
Returns true if the type is signed; false otherwise.
virtual unsigned getFloatEvalMethod() const
Return the value for the C99 FLT_EVAL_METHOD macro.
const llvm::fltSemantics & getDoubleFormat() const
IntType getIntMaxType() const
Concrete class used by the front-end to report problems and issues.
static void InitializePredefinedMacros(const TargetInfo &TI, const LangOptions &LangOpts, const FrontendOptions &FEOpts, MacroBuilder &Builder)
void append(const Twine &Str)
Directly append Str and a newline to the underlying buffer.
static void DefineType(const Twine &MacroName, TargetInfo::IntType Ty, MacroBuilder &Builder)
const char * getOriginalSourceFile() const
getOriginalSourceFile - Return the full path to the original header file name that was used to genera...
static void DefineFloatMacros(MacroBuilder &Builder, StringRef Prefix, const llvm::fltSemantics *Sem, StringRef Ext)
static void AddImplicitInclude(MacroBuilder &Builder, StringRef File)
AddImplicitInclude - Add an implicit #include of the specified file to the predefines buffer...
const TargetInfo & getTargetInfo() const
static void DefineExactWidthIntTypeSize(TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
This abstract interface provides operations for unwrapping containers for serialized ASTs (precompile...
static void DefineExactWidthIntType(TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
unsigned UsePredefines
Initialize the preprocessor with the compiler and target specific predefines.
unsigned getTypeWidth(IntType T) const
Return the width (in bits) of the specified integer type enum.
Exposes information about the current target.
static void DefineLeastWidthIntType(unsigned TypeWidth, bool IsSigned, const TargetInfo &TI, MacroBuilder &Builder)
bool isNeXTFamily() const
Is this runtime basically of the NeXT family of runtimes?
IntType getIntPtrType() const
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...
const llvm::fltSemantics & getFloatFormat() const
Defines version macros and version-related utility functions for Clang.
Defines the clang::Preprocessor interface.
IntType getUInt64Type() const
clang::ObjCRuntime ObjCRuntime
The result type of a method or function.
IntType getChar32Type() const
static const char * getTypeName(IntType T)
Return the user string for the specified integer type enum.
IntType getUIntPtrType() const
static const char * getLockFreeValue(unsigned TypeWidth, unsigned TypeAlign, unsigned InlineWidth)
Get the value the ATOMIC_*_LOCK_FREE macro should have for a type with the specified properties...
static bool MacroBodyEndsInBackslash(StringRef MacroBody)
bool isNonFragile() const
Does this runtime follow the set of implied behaviors for a "non-fragile" ABI?
uint64_t getPointerAlign(unsigned AddrSpace) const
static void DefineFastIntType(unsigned TypeWidth, bool IsSigned, const TargetInfo &TI, MacroBuilder &Builder)
static void InitializeStandardPredefinedMacros(const TargetInfo &TI, const LangOptions &LangOpts, const FrontendOptions &FEOpts, MacroBuilder &Builder)
static void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags)
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...
std::string ImplicitPCHInclude
The implicit PCH included at the start of the translation unit, or empty.
'objfw' is the Objective-C runtime included in ObjFW
IntType getSigAtomicType() const
static void AddImplicitIncludePTH(MacroBuilder &Builder, Preprocessor &PP, StringRef ImplicitIncludePTH)
AddImplicitIncludePTH - Add an implicit #include using the original file used to generate a PTH cache...
const TargetInfo * getAuxTargetInfo() const
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
unsigned getMajor() const
Retrieve the major version number.
IntType getUIntMaxType() const
const VersionTuple & getVersion() const
DiagnosticsEngine & getDiagnostics() const
std::vector< std::string > MacroIncludes
IntType getWCharType() const
IntType
===-— Target Data Type Query Methods ----------------------------—===//
const llvm::fltSemantics & getLongDoubleFormat() const
static const char * getTypeFormatModifier(IntType T)
Return the printf format modifier for the specified integer type enum.
frontend::ActionKind ProgramAction
The frontend action to perform.
unsigned getCharWidth() const
unsigned getShortWidth() const
Return the size of 'signed short' and 'unsigned short' for this target, in bits.
virtual IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const
Return the smallest integer type with at least the specified width.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
virtual bool hasInt128Type() const
Determine whether the __int128 type is supported on this target.
unsigned getMaxAtomicInlineWidth() const
Return the maximum width lock-free atomic operation which can be inlined given the supported features...
FrontendOptions - Options for controlling the behavior of the frontend.
#define DEFINE_LOCK_FREE_MACRO(TYPE, Type)
virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const =0
===-— Other target property query methods --------------------——===//
Optional< unsigned > getSubminor() const
Retrieve the subminor version number, if provided.
ObjCXXARCStandardLibraryKind ObjCXXARCStandardLibrary
The Objective-C++ ARC standard library that we should support, by providing appropriate definitions t...
unsigned getIntWidth() const
getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for this target, in bits.
unsigned getLongLongWidth() const
getLongLongWidth/Align - Return the size of 'signed long long' and 'unsigned long long' for this targ...
std::string getClangFullCPPVersion()
Retrieves a string representing the complete clang version suitable for use in the CPP VERSION macro...
uint64_t getPointerWidth(unsigned AddrSpace) const
Return the width of pointers on this target, for the specified address space.
BoundNodesTreeBuilder *const Builder
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 ...
IntType getInt64Type() const
IntType getChar16Type() const
Run one or more source code analyses.
unsigned getLongWidth() const
getLongWidth/Align - Return the size of 'signed long' and 'unsigned long' for this target...
std::pair< unsigned, bool > PrecompiledPreambleBytes
If non-zero, the implicit PCH include is actually a precompiled preamble that covers this number of b...
Defines the clang::TargetInfo interface.
#define CLANG_VERSION_STRING
A string that describes the Clang version number, e.g., "1.0".
unsigned getSuitableAlign() const
Return the alignment that is suitable for storing any object with a fundamental alignment requirement...
void defineMacro(const Twine &Name, const Twine &Value="1")
Append a #define line for macro of the form "\#define Name Value\n".
void setSkipMainFilePreamble(unsigned Bytes, bool StartOfLine)
Instruct the preprocessor to skip part of the main source file.
static T PickFP(const llvm::fltSemantics *Sem, 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...
const llvm::DataLayout & getDataLayout() const
IntType getPtrDiffType(unsigned AddrSpace) const
PTHManager * getPTHManager()
static void DefineTypeWidth(StringRef MacroName, TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder)
Engages in a tight little dance with the lexer to efficiently preprocess tokens.