19#include "llvm/Support/DJB.h"
20#include "llvm/Support/FileSystem.h"
21#include "llvm/Support/raw_ostream.h"
32 case BuiltinType::Void:
35 case BuiltinType::Bool:
38 case BuiltinType::Char_U:
41 case BuiltinType::UChar:
44 case BuiltinType::UShort:
47 case BuiltinType::UInt:
50 case BuiltinType::ULong:
53 case BuiltinType::ULongLong:
56 case BuiltinType::UInt128:
59 case BuiltinType::Char_S:
62 case BuiltinType::SChar:
65 case BuiltinType::WChar_S:
66 case BuiltinType::WChar_U:
69 case BuiltinType::Short:
72 case BuiltinType::Int:
75 case BuiltinType::Long:
78 case BuiltinType::LongLong:
81 case BuiltinType::Int128:
84 case BuiltinType::Half:
87 case BuiltinType::Float:
90 case BuiltinType::Double:
93 case BuiltinType::LongDouble:
96 case BuiltinType::ShortAccum:
99 case BuiltinType::Accum:
102 case BuiltinType::LongAccum:
105 case BuiltinType::UShortAccum:
108 case BuiltinType::UAccum:
111 case BuiltinType::ULongAccum:
114 case BuiltinType::ShortFract:
117 case BuiltinType::Fract:
120 case BuiltinType::LongFract:
123 case BuiltinType::UShortFract:
126 case BuiltinType::UFract:
129 case BuiltinType::ULongFract:
132 case BuiltinType::SatShortAccum:
135 case BuiltinType::SatAccum:
138 case BuiltinType::SatLongAccum:
141 case BuiltinType::SatUShortAccum:
144 case BuiltinType::SatUAccum:
147 case BuiltinType::SatULongAccum:
150 case BuiltinType::SatShortFract:
153 case BuiltinType::SatFract:
156 case BuiltinType::SatLongFract:
159 case BuiltinType::SatUShortFract:
162 case BuiltinType::SatUFract:
165 case BuiltinType::SatULongFract:
168 case BuiltinType::Float16:
171 case BuiltinType::Float128:
174 case BuiltinType::Ibm128:
177 case BuiltinType::NullPtr:
180 case BuiltinType::Char8:
183 case BuiltinType::Char16:
186 case BuiltinType::Char32:
189 case BuiltinType::Overload:
192 case BuiltinType::UnresolvedTemplate:
195 case BuiltinType::BoundMember:
198 case BuiltinType::PseudoObject:
201 case BuiltinType::Dependent:
204 case BuiltinType::UnknownAny:
207 case BuiltinType::ARCUnbridgedCast:
210 case BuiltinType::ObjCId:
213 case BuiltinType::ObjCClass:
216 case BuiltinType::ObjCSel:
219#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
220 case BuiltinType::Id: \
221 ID = PREDEF_TYPE_##Id##_ID; \
223#include "clang/Basic/OpenCLImageTypes.def"
224#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
225 case BuiltinType::Id: \
226 ID = PREDEF_TYPE_##Id##_ID; \
228#include "clang/Basic/OpenCLExtensionTypes.def"
229 case BuiltinType::OCLSampler:
232 case BuiltinType::OCLEvent:
235 case BuiltinType::OCLClkEvent:
238 case BuiltinType::OCLQueue:
241 case BuiltinType::OCLReserveID:
244#define SVE_TYPE(Name, Id, SingletonId) \
245 case BuiltinType::Id: \
246 ID = PREDEF_TYPE_##Id##_ID; \
248#include "clang/Basic/AArch64SVEACLETypes.def"
249#define PPC_VECTOR_TYPE(Name, Id, Size) \
250 case BuiltinType::Id: \
251 ID = PREDEF_TYPE_##Id##_ID; \
253#include "clang/Basic/PPCTypes.def"
254#define RVV_TYPE(Name, Id, SingletonId) \
255 case BuiltinType::Id: \
256 ID = PREDEF_TYPE_##Id##_ID; \
258#include "clang/Basic/RISCVVTypes.def"
259#define WASM_TYPE(Name, Id, SingletonId) \
260 case BuiltinType::Id: \
261 ID = PREDEF_TYPE_##Id##_ID; \
263#include "clang/Basic/WebAssemblyReferenceTypes.def"
264#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) \
265 case BuiltinType::Id: \
266 ID = PREDEF_TYPE_##Id##_ID; \
268#include "clang/Basic/AMDGPUTypes.def"
269#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) \
270 case BuiltinType::Id: \
271 ID = PREDEF_TYPE_##Id##_ID; \
273#include "clang/Basic/HLSLIntangibleTypes.def"
274 case BuiltinType::BuiltinFn:
277 case BuiltinType::IncompleteMatrixIdx:
280 case BuiltinType::ArraySection:
283 case BuiltinType::OMPArrayShaping:
286 case BuiltinType::OMPIterator:
289 case BuiltinType::BFloat16:
302 for (
unsigned I = 0; I != N; ++I)
304 R = llvm::djbHash(II->getName(), R);
312 case Decl::TranslationUnit:
313 case Decl::ExternCContext:
314 case Decl::Namespace:
315 case Decl::LinkageSpec:
328 case Decl::CXXRecord:
329 case Decl::ClassTemplateSpecialization:
330 case Decl::ClassTemplatePartialSpecialization:
335 case Decl::CXXMethod:
336 case Decl::CXXConstructor:
337 case Decl::CXXDestructor:
338 case Decl::CXXConversion:
339 case Decl::ObjCMethod:
344 case Decl::ObjCCategory:
345 case Decl::ObjCCategoryImpl:
346 case Decl::ObjCImplementation:
349 case Decl::ObjCProtocol:
358 case Decl::ObjCInterface:
362 llvm_unreachable(
"Unhandled DeclContext in AST reader");
365 llvm_unreachable(
"Unhandled decl kind");
370 case Decl::TranslationUnit:
371 case Decl::ExternCContext:
375 case Decl::Namespace:
376 case Decl::NamespaceAlias:
378 case Decl::TypeAlias:
381 case Decl::CXXRecord:
382 case Decl::ClassTemplateSpecialization:
383 case Decl::ClassTemplatePartialSpecialization:
384 case Decl::VarTemplateSpecialization:
385 case Decl::VarTemplatePartialSpecialization:
387 case Decl::CXXDeductionGuide:
388 case Decl::CXXMethod:
389 case Decl::CXXConstructor:
390 case Decl::CXXDestructor:
391 case Decl::CXXConversion:
392 case Decl::UsingShadow:
393 case Decl::ConstructorUsingShadow:
395 case Decl::FunctionTemplate:
396 case Decl::ClassTemplate:
397 case Decl::VarTemplate:
398 case Decl::TypeAliasTemplate:
399 case Decl::ObjCProtocol:
400 case Decl::ObjCInterface:
405 case Decl::UsingDirective:
407 case Decl::UnresolvedUsingTypename:
408 case Decl::TemplateTypeParm:
409 case Decl::EnumConstant:
410 case Decl::UnresolvedUsingValue:
411 case Decl::IndirectField:
413 case Decl::MSProperty:
415 case Decl::UnnamedGlobalConstant:
416 case Decl::TemplateParamObject:
418 case Decl::ObjCAtDefsField:
419 case Decl::NonTypeTemplateParm:
420 case Decl::TemplateTemplateParm:
422 case Decl::UsingEnum:
423 case Decl::UsingPack:
424 case Decl::ObjCMethod:
425 case Decl::ObjCCategory:
426 case Decl::ObjCCategoryImpl:
427 case Decl::ObjCImplementation:
428 case Decl::ObjCProperty:
429 case Decl::ObjCCompatibleAlias:
430 case Decl::LinkageSpec:
432 case Decl::ObjCPropertyImpl:
433 case Decl::PragmaComment:
434 case Decl::PragmaDetectMismatch:
435 case Decl::FileScopeAsm:
436 case Decl::TopLevelStmt:
437 case Decl::AccessSpec:
439 case Decl::FriendTemplate:
440 case Decl::StaticAssert:
444 case Decl::OMPThreadPrivate:
445 case Decl::OMPAllocate:
446 case Decl::OMPRequires:
447 case Decl::OMPCapturedExpr:
448 case Decl::OMPDeclareReduction:
449 case Decl::OMPDeclareMapper:
450 case Decl::BuiltinTemplate:
451 case Decl::Decomposition:
454 case Decl::ImplicitConceptSpecialization:
455 case Decl::LifetimeExtendedTemporary:
456 case Decl::RequiresExprBody:
457 case Decl::UnresolvedUsingIfExists:
458 case Decl::HLSLBuffer:
463 case Decl::ImplicitParam:
465 case Decl::ObjCTypeParam:
469 llvm_unreachable(
"Unhandled declaration kind");
483 if (
auto *FD = dyn_cast<FunctionDecl>(
D))
484 return !FD->getDescribedFunctionTemplate();
485 if (
auto *RD = dyn_cast<CXXRecordDecl>(
D))
486 return !RD->getDescribedClassTemplate();
495 if (
auto *VD = dyn_cast<VarDecl>(
D))
496 return VD->isStaticLocal();
498 return isa<TagDecl, BlockDecl>(
D);
503 if (
D->getDeclName())
507 return isa<TagDecl, FieldDecl>(
D);
513 llvm::raw_fd_ostream OS(ModuleFile::getTimestampFilename(ModuleFilename), EC,
514 llvm::sys::fs::OF_TextWithCRLF);
517 OS <<
"Timestamp file\n";
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
static const NamedDecl * getDefinition(const Decl *D)
virtual ~ASTDeserializationListener()
This class is used for builtin types like 'int'.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
bool isDependentContext() const
Determines whether this context is dependent on a template parameter.
bool isFunctionOrMethod() const
Decl::Kind getDeclKind() const
FriendObjectKind getFriendObjectKind() const
Determines whether this declaration is the object of a friend declaration and, if so,...
Kind
Lists the kind of concrete classes of Decl.
DeclContext * getLexicalDeclContext()
getLexicalDeclContext - The declaration context where this Decl was lexically declared (LexicalDC).
One of these records is kept for each identifier that is lexed.
This represents a decl that may have a name.
Represents an Objective-C protocol declaration.
Smart pointer class that efficiently represents Objective-C method names.
const IdentifierInfo * getIdentifierInfoForSlot(unsigned argIndex) const
Retrieve the identifier at a given position in the selector.
unsigned getNumArgs() const
Represents the declaration of a struct/union/class/enum.
A type index; the type ID with the qualifier bits removed.
@ PREDEF_TYPE_LONG_ACCUM_ID
The 'long _Accum' type.
@ PREDEF_TYPE_SAMPLER_ID
OpenCL sampler type.
@ PREDEF_TYPE_INT128_ID
The '__int128_t' type.
@ PREDEF_TYPE_CHAR32_ID
The C++ 'char32_t' type.
@ PREDEF_TYPE_SAT_SHORT_ACCUM_ID
The '_Sat short _Accum' type.
@ PREDEF_TYPE_IBM128_ID
The '__ibm128' type.
@ PREDEF_TYPE_SHORT_FRACT_ID
The 'short _Fract' type.
@ PREDEF_TYPE_BOUND_MEMBER
The placeholder type for bound member functions.
@ PREDEF_TYPE_LONGLONG_ID
The (signed) 'long long' type.
@ PREDEF_TYPE_FRACT_ID
The '_Fract' type.
@ PREDEF_TYPE_ARC_UNBRIDGED_CAST
ARC's unbridged-cast placeholder type.
@ PREDEF_TYPE_USHORT_FRACT_ID
The 'unsigned short _Fract' type.
@ PREDEF_TYPE_SAT_ULONG_FRACT_ID
The '_Sat unsigned long _Fract' type.
@ PREDEF_TYPE_BOOL_ID
The 'bool' or '_Bool' type.
@ PREDEF_TYPE_SAT_LONG_ACCUM_ID
The '_Sat long _Accum' type.
@ PREDEF_TYPE_SAT_LONG_FRACT_ID
The '_Sat long _Fract' type.
@ PREDEF_TYPE_SAT_SHORT_FRACT_ID
The '_Sat short _Fract' type.
@ PREDEF_TYPE_CHAR_U_ID
The 'char' type, when it is unsigned.
@ PREDEF_TYPE_RESERVE_ID_ID
OpenCL reserve_id type.
@ PREDEF_TYPE_SAT_ACCUM_ID
The '_Sat _Accum' type.
@ PREDEF_TYPE_BUILTIN_FN
The placeholder type for builtin functions.
@ PREDEF_TYPE_SHORT_ACCUM_ID
The 'short _Accum' type.
@ PREDEF_TYPE_FLOAT_ID
The 'float' type.
@ PREDEF_TYPE_QUEUE_ID
OpenCL queue type.
@ PREDEF_TYPE_INT_ID
The (signed) 'int' type.
@ PREDEF_TYPE_OBJC_SEL
The ObjC 'SEL' type.
@ PREDEF_TYPE_BFLOAT16_ID
The '__bf16' type.
@ PREDEF_TYPE_WCHAR_ID
The C++ 'wchar_t' type.
@ PREDEF_TYPE_UCHAR_ID
The 'unsigned char' type.
@ PREDEF_TYPE_UACCUM_ID
The 'unsigned _Accum' type.
@ PREDEF_TYPE_SCHAR_ID
The 'signed char' type.
@ PREDEF_TYPE_CHAR_S_ID
The 'char' type, when it is signed.
@ PREDEF_TYPE_NULLPTR_ID
The type of 'nullptr'.
@ PREDEF_TYPE_ULONG_FRACT_ID
The 'unsigned long _Fract' type.
@ PREDEF_TYPE_FLOAT16_ID
The '_Float16' type.
@ PREDEF_TYPE_UINT_ID
The 'unsigned int' type.
@ PREDEF_TYPE_FLOAT128_ID
The '__float128' type.
@ PREDEF_TYPE_OBJC_ID
The ObjC 'id' type.
@ PREDEF_TYPE_CHAR16_ID
The C++ 'char16_t' type.
@ PREDEF_TYPE_ARRAY_SECTION
The placeholder type for an array section.
@ PREDEF_TYPE_ULONGLONG_ID
The 'unsigned long long' type.
@ PREDEF_TYPE_SAT_UFRACT_ID
The '_Sat unsigned _Fract' type.
@ PREDEF_TYPE_USHORT_ID
The 'unsigned short' type.
@ PREDEF_TYPE_SHORT_ID
The (signed) 'short' type.
@ PREDEF_TYPE_OMP_ARRAY_SHAPING
The placeholder type for OpenMP array shaping operation.
@ PREDEF_TYPE_DEPENDENT_ID
The placeholder type for dependent types.
@ PREDEF_TYPE_LONGDOUBLE_ID
The 'long double' type.
@ PREDEF_TYPE_DOUBLE_ID
The 'double' type.
@ PREDEF_TYPE_UINT128_ID
The '__uint128_t' type.
@ PREDEF_TYPE_HALF_ID
The OpenCL 'half' / ARM NEON __fp16 type.
@ PREDEF_TYPE_VOID_ID
The void type.
@ PREDEF_TYPE_SAT_USHORT_FRACT_ID
The '_Sat unsigned short _Fract' type.
@ PREDEF_TYPE_ACCUM_ID
The '_Accum' type.
@ PREDEF_TYPE_SAT_FRACT_ID
The '_Sat _Fract' type.
@ PREDEF_TYPE_USHORT_ACCUM_ID
The 'unsigned short _Accum' type.
@ PREDEF_TYPE_CHAR8_ID
The C++ 'char8_t' type.
@ PREDEF_TYPE_UFRACT_ID
The 'unsigned _Fract' type.
@ PREDEF_TYPE_OVERLOAD_ID
The placeholder type for overloaded function sets.
@ PREDEF_TYPE_INCOMPLETE_MATRIX_IDX
A placeholder type for incomplete matrix index operations.
@ PREDEF_TYPE_UNRESOLVED_TEMPLATE
The placeholder type for unresolved templates.
@ PREDEF_TYPE_SAT_USHORT_ACCUM_ID
The '_Sat unsigned short _Accum' type.
@ PREDEF_TYPE_LONG_ID
The (signed) 'long' type.
@ PREDEF_TYPE_SAT_ULONG_ACCUM_ID
The '_Sat unsigned long _Accum' type.
@ PREDEF_TYPE_LONG_FRACT_ID
The 'long _Fract' type.
@ PREDEF_TYPE_UNKNOWN_ANY
The 'unknown any' placeholder type.
@ PREDEF_TYPE_OMP_ITERATOR
The placeholder type for OpenMP iterator expression.
@ PREDEF_TYPE_PSEUDO_OBJECT
The pseudo-object placeholder type.
@ PREDEF_TYPE_OBJC_CLASS
The ObjC 'Class' type.
@ PREDEF_TYPE_ULONG_ID
The 'unsigned long' type.
@ PREDEF_TYPE_SAT_UACCUM_ID
The '_Sat unsigned _Accum' type.
@ PREDEF_TYPE_CLK_EVENT_ID
OpenCL clk event type.
@ PREDEF_TYPE_EVENT_ID
OpenCL event type.
@ PREDEF_TYPE_ULONG_ACCUM_ID
The 'unsigned long _Accum' type.
bool isRedeclarableDeclKind(unsigned Kind)
Determine whether the given declaration kind is redeclarable.
TypeIdx TypeIdxFromBuiltin(const BuiltinType *BT)
bool needsAnonymousDeclarationNumber(const NamedDecl *D)
Determine whether the given declaration needs an anonymous declaration number.
const DeclContext * getDefinitiveDeclContext(const DeclContext *DC)
Retrieve the "definitive" declaration that provides all of the visible entries for the given declarat...
void updateModuleTimestamp(StringRef ModuleFilename)
unsigned ComputeHash(Selector Sel)
The JSON file list parser is used to communicate input to InstallAPI.