14#ifndef LLVM_CLANG_AST_TYPELOC_H
15#define LLVM_CLANG_AST_TYPELOC_H
25#include "llvm/ADT/ArrayRef.h"
26#include "llvm/Support/Casting.h"
27#include "llvm/Support/Compiler.h"
28#include "llvm/Support/MathExtras.h"
41class ObjCInterfaceDecl;
42class ObjCProtocolDecl;
43class ObjCTypeParamDecl;
45class TemplateTypeParmDecl;
47class UnresolvedUsingTypenameDecl;
50#define ABSTRACT_TYPELOC(Class, Base)
51#define TYPELOC(Class, Base) \
53#include "clang/AST/TypeLocNodes.def"
63 const void *
Ty =
nullptr;
69 :
Ty(ty.getAsOpaquePtr()),
Data(opaqueData) {}
71 :
Ty(ty),
Data(opaqueData) {}
79 assert(T::isKind(*
this));
90 if (!T::isKind(*
this))
102 template <
typename T>
109#define ABSTRACT_TYPE(Class, Base)
110#define TYPE(Class, Base) \
112#include "clang/AST/TypeNodes.inc"
122 explicit operator bool()
const {
return Ty; }
160 return getLocalSourceRangeImpl(*
this);
171 return getNextTypeLocImpl(*
this);
201 initializeImpl(Context, *
this,
Loc);
228 return !(LHS == RHS);
239 static bool isKind(
const TypeLoc&) {
243 static void initializeImpl(ASTContext &Context,
TypeLoc TL,
247 static SourceRange getLocalSourceRangeImpl(
TypeLoc TL);
250inline TypeSourceInfo::TypeSourceInfo(QualType ty,
size_t DataSize) : Ty(ty) {
252 memset(
static_cast<void *
>(
this + 1), 0, DataSize);
258 return TypeLoc(Ty,
const_cast<void*
>(
static_cast<const void*
>(
this + 1)));
269 return reinterpret_cast<const Type*
>(
Ty);
279 static bool isKind(
const TypeLoc &TL) {
297 dataInt = llvm::alignTo(dataInt, align);
333 static bool isKind(
const TypeLoc &TL) {
340 return Loc.getUnqualifiedLoc();
341 return castAs<UnqualTypeLoc>();
372template <
class Base,
class Derived,
class TypeClass,
class LocalData>
376 const Derived *asDerived()
const {
377 return static_cast<const Derived*
>(
this);
380 static bool isKind(
const TypeLoc &TL) {
385 static bool classofType(
const Type *Ty) {
386 return TypeClass::classof(Ty);
391 return std::max(
unsigned(
alignof(LocalData)),
396 unsigned size =
sizeof(LocalData);
397 unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
398 size = llvm::alignTo(size, extraAlign);
399 size += asDerived()->getExtraLocalDataSize();
422 return cast<TypeClass>(Base::getTypePtr());
435 return static_cast<LocalData*
>(Base::Data);
442 unsigned size =
sizeof(LocalData);
443 unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
444 size = llvm::alignTo(size, extraAlign);
445 return reinterpret_cast<char *
>(Base::Data) + size;
449 auto data =
reinterpret_cast<uintptr_t>(Base::Data);
450 data += asDerived()->getLocalDataSize();
451 data = llvm::alignTo(data, getNextTypeAlign());
452 return reinterpret_cast<void*
>(data);
463 unsigned getInnerTypeSize()
const {
467 unsigned getInnerTypeSize(HasNoInnerType _)
const {
471 unsigned getInnerTypeSize(QualType _)
const {
475 unsigned getNextTypeAlign()
const {
479 unsigned getNextTypeAlign(HasNoInnerType _)
const {
483 unsigned getNextTypeAlign(QualType
T)
const {
497template <
class Base,
class Derived,
class TypeClass>
501 static bool classofType(
const Type *Ty) {
502 return TypeClass::classof(Ty);
505 static bool isKind(
const TypeLoc &TL) {
509 static bool isKind(
const UnqualTypeLoc &TL) {
510 return Derived::classofType(TL.getTypePtr());
515 return cast<TypeClass>(Base::getTypePtr());
554 static bool isKind(
const TypeLoc &TL);
578 BuiltinRange =
Range;
596 return (bk >= BuiltinType::UShort && bk <= BuiltinType::UInt128) ||
597 (bk >= BuiltinType::Short && bk <= BuiltinType::Ibm128) ||
598 bk == BuiltinType::UChar || bk == BuiltinType::SChar;
682 UsingTypeLoc, UsingType> {
704 InjectedClassNameTypeLoc,
705 InjectedClassNameType> {
715 UnresolvedUsingTypeLoc,
716 UnresolvedUsingType> {
757 TemplateTypeParmTypeLoc,
758 TemplateTypeParmType> {
770 ObjCTypeParamTypeLoc,
772 ObjCTypeParamTypeLocInfo> {
815 return getProtocolLocArray()[i];
820 getProtocolLocArray()[i] =
Loc;
856 SubstTemplateTypeParmTypeLoc,
857 SubstTemplateTypeParmType> {
863 SubstTemplateTypeParmPackTypeLoc,
864 SubstTemplateTypeParmPackType> {
906 return dyn_cast_or_null<T>(
getAttr());
925 BTFTagAttributedType, BTFTagAttributedLocInfo> {
933 return dyn_cast_or_null<T>(
getAttr());
959 ObjCObjectTypeLocInfo> {
994 return getTypeArgLocArray()[i];
999 getTypeArgLocArray()[i] = TInfo;
1024 return getProtocolLocArray()[i];
1029 getProtocolLocArray()[i] =
Loc;
1073 "not enough alignment for tail-allocated data");
1089 ObjCInterfaceTypeLoc,
1091 ObjCInterfaceLocInfo> {
1126 BoundsAttributedType, BoundsAttributedLocInfo> {
1139 CountAttributedTypeLoc,
1140 CountAttributedType> {
1155 MacroQualifiedType, MacroQualifiedLocInfo> {
1226 if (ParenTypeLoc::isKind(*
this))
1227 return IgnoreParensImpl(*
this);
1234 AdjustedType, AdjustedLocInfo> {
1262 AdjustedTypeLoc, DecayedTypeLoc, DecayedType> {
1270template <
class Derived,
class TypeClass,
class LocalData = Po
interLikeLocInfo>
1272 TypeClass, LocalData> {
1332 MemberPointerLocInfo> {
1370 ObjCObjectPointerType> {
1385 return getTypePtr()->getPointeeTypeAsWritten();
1391 LValueReferenceTypeLoc,
1392 LValueReferenceType> {
1405 RValueReferenceTypeLoc,
1406 RValueReferenceType> {
1429 bool hasExceptionSpec()
const {
1430 if (
auto *FPT = dyn_cast<FunctionProtoType>(
getTypePtr())) {
1431 return FPT->hasExceptionSpec();
1437 assert(hasExceptionSpec() &&
"No exception spec range");
1481 if (hasExceptionSpec())
1482 return *getExceptionSpecRangePtr();
1487 if (hasExceptionSpec())
1488 *getExceptionSpecRangePtr() = R;
1503 return cast<FunctionProtoType>(
getTypePtr())->getNumParams();
1524 if (hasExceptionSpec())
1531 unsigned ExceptSpecSize = hasExceptionSpec() ?
sizeof(
SourceRange) : 0;
1542 FunctionProtoTypeLoc,
1543 FunctionProtoType> {
1548 FunctionNoProtoTypeLoc,
1549 FunctionNoProtoType> {
1610 ConstantArrayTypeLoc,
1611 ConstantArrayType> {
1617 ConstantArrayTypeLoc, ArrayParameterTypeLoc, ArrayParameterType> {};
1621 IncompleteArrayTypeLoc,
1622 IncompleteArrayType> {
1627 DependentSizedArrayTypeLoc,
1628 DependentSizedArrayType> {
1638 VariableArrayTypeLoc,
1639 VariableArrayType> {
1655 TemplateSpecializationTypeLoc,
1656 TemplateSpecializationType,
1657 TemplateSpecializationLocInfo> {
1688 getArgInfos()[i] = AI;
1692 return getArgInfos()[i];
1711 assert(size ==
Loc.getFullDataSize());
1733 getArgInfos(),
Loc);
1763 DependentAddressSpaceTypeLoc,
1764 DependentAddressSpaceType,
1765 DependentAddressSpaceLocInfo> {
1837 VectorType, VectorTypeLocInfo> {
1860 DependentVectorType, VectorTypeLocInfo> {
1887 :
public ConcreteTypeLoc<UnqualTypeLoc, DependentSizedExtVectorTypeLoc,
1888 DependentSizedExtVectorType, VectorTypeLocInfo> {
1915 MatrixType, MatrixTypeLocInfo> {
1962 ConstantMatrixType> {};
1966 DependentSizedMatrixTypeLoc,
1967 DependentSizedMatrixType> {};
1988template <
class Derived,
class TypeClass,
class LocalData = TypeofLocInfo>
1990 :
public ConcreteTypeLoc<UnqualTypeLoc, Derived, TypeClass, LocalData> {
2038 TypeOfExprTypeLocInfo> {
2054 return this->
getTypePtr()->getUnmodifiedType();
2078 :
public ConcreteTypeLoc<UnqualTypeLoc, DecltypeTypeLoc, DecltypeType,
2079 DecltypeTypeLocInfo> {
2105 PackIndexingType, PackIndexingTypeLocInfo> {
2135 UnaryTransformTypeLoc,
2137 UnaryTransformTypeLocInfo> {
2209 return CR->getNestedNameSpecifierLoc();
2215 return CR->getTemplateKWLoc();
2221 return CR->getConceptNameLoc();
2227 return CR->getFoundDecl();
2233 return CR->getNamedConcept();
2245 ->getTemplateArgsAsWritten()
2252 if (
const auto *TAAW = CR->getTemplateArgsAsWritten())
2253 return TAAW->getLAngleLoc();
2259 if (
const auto *TAAW = CR->getTemplateArgsAsWritten())
2260 return TAAW->getRAngleLoc();
2270 assert(CR &&
"No ConceptReference");
2271 return CR->getTemplateArgsAsWritten()->getTemplateArgs()[i];
2286 assert(size ==
Loc.getFullDataSize());
2295 DeducedTemplateSpecializationTypeLoc,
2296 DeducedTemplateSpecializationType> {
2317 ElaboratedLocInfo> {
2325 assert(
Loc.isInvalid());
2340 "Inconsistent nested-name-specifier pointer");
2383 assert(size ==
Loc.getFullDataSize());
2395 DependentNameTypeLoc,
2397 DependentNameLocInfo> {
2415 "Inconsistent nested-name-specifier pointer");
2436 assert(size ==
Loc.getFullDataSize());
2452 DependentTemplateSpecializationTypeLoc,
2453 DependentTemplateSpecializationType,
2454 DependentTemplateSpecializationLocInfo> {
2473 if (!QualifierLoc) {
2484 "Inconsistent nested-name-specifier pointer");
2525 getArgInfos()[i] = AI;
2529 return getArgInfos()[i];
2550 assert(size ==
Loc.getFullDataSize());
2576 PackExpansionType, PackExpansionTypeLocInfo> {
2608 AtomicType, AtomicTypeLocInfo> {
2683template <
typename T>
2686 while (!T::isKind(Cur)) {
2688 Cur = PTL.getInnerLoc();
2690 Cur = ATL.getModifiedLoc();
2692 Cur = ATL.getWrappedLoc();
2694 Cur = ETL.getNamedTypeLoc();
2696 Cur = ATL.getOriginalLoc();
2698 Cur = MQL.getInnerLoc();
2709 DependentBitIntType> {};
2717 : Protocol(protocol),
Loc(loc) {}
This file provides AST data structures related to concepts.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::SourceLocation class and associated facilities.
Defines various enumerations that describe declaration and type specifiers.
C Language Family Type Representation.
__DEVICE__ void * memcpy(void *__a, const void *__b, size_t __c)
__DEVICE__ void * memset(void *__a, int __b, size_t __c)
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
QualType getInnerType() const
unsigned getLocalDataSize() const
TypeLoc getOriginalLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceRange getLocalSourceRange() const
QualType getOriginalType() const
Wrapper for source info for array parameter types.
Wrapper for source info for arrays.
SourceLocation getLBracketLoc() const
Expr * getSizeExpr() const
void setLBracketLoc(SourceLocation Loc)
TypeLoc getElementLoc() const
void setRBracketLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getRBracketLoc() const
SourceRange getBracketsRange() const
SourceRange getLocalSourceRange() const
QualType getInnerType() const
void setSizeExpr(Expr *Size)
QualType getElementType() const
SourceLocation getRParenLoc() const
QualType getInnerType() const
SourceRange getLocalSourceRange() const
void setRParenLoc(SourceLocation Loc)
SourceRange getParensRange() const
TypeLoc getValueLoc() const
void setLParenLoc(SourceLocation Loc)
void setKWLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getKWLoc() const
SourceLocation getLParenLoc() const
void setParensRange(SourceRange Range)
QualType getValueType() const
Gets the type contained by this atomic type, i.e.
Attr - This represents one attribute.
Type source information for an attributed type.
const Attr * getAttr() const
The type attribute.
QualType getInnerType() const
TypeLoc getModifiedLoc() const
The modified type, which is generally canonically different from the attribute type.
TypeLoc getEquivalentTypeLoc() const
void initializeLocal(ASTContext &Context, SourceLocation loc)
SourceRange getLocalSourceRange() const
void setAttr(const Attr *A)
attr::Kind getAttrKind() const
QualType getModifiedType() const
bool isQualifier() const
Does this attribute behave like a type qualifier?
bool hasExplicitTemplateArgs() const
SourceLocation getTemplateKWLoc() const
AutoTypeKeyword getAutoKeyword() const
const NestedNameSpecifierLoc getNestedNameSpecifierLoc() const
SourceLocation getRAngleLoc() const
SourceLocation getRParenLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
ConceptDecl * getNamedConcept() const
SourceRange getLocalSourceRange() const
void copy(AutoTypeLoc Loc)
SourceLocation getLAngleLoc() const
void setConceptReference(ConceptReference *CR)
SourceLocation getConceptNameLoc() const
NamedDecl * getFoundDecl() const
TemplateArgumentLoc getArgLoc(unsigned i) const
bool isDecltypeAuto() const
bool isConstrained() const
unsigned getNumArgs() const
ConceptReference * getConceptReference() const
DeclarationNameInfo getConceptNameInfo() const
void setRParenLoc(SourceLocation Loc)
ArrayRef< TemplateArgument > getTypeConstraintArguments() const
bool isDecltypeAuto() const
AutoTypeKeyword getKeyword() const
bool isConstrained() const
Type source information for an btf_tag attributed type.
QualType getInnerType() const
TypeLoc getWrappedLoc() const
void initializeLocal(ASTContext &Context, SourceLocation loc)
const BTFTypeTagAttr * getAttr() const
The btf_type_tag attribute.
SourceRange getLocalSourceRange() const
const BTFTypeTagAttr * getAttr() const
QualType getWrappedType() const
Wrapper for source info for block pointers.
SourceLocation getCaretLoc() const
void setCaretLoc(SourceLocation Loc)
QualType getInnerType() const
unsigned getLocalDataSize() const
TypeLoc getInnerLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
Wrapper for source info for builtin types.
SourceLocation getBuiltinLoc() const
TypeSpecifierType getWrittenTypeSpec() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
TypeSpecifierWidth getWrittenWidthSpec() const
SourceRange getLocalSourceRange() const
void setWrittenTypeSpec(TypeSpecifierType written)
const WrittenBuiltinSpecs & getWrittenBuiltinSpecs() const
bool needsExtraLocalData() const
bool hasWrittenWidthSpec() const
void setModeAttr(bool written)
void setBuiltinLoc(SourceLocation Loc)
void setWrittenWidthSpec(TypeSpecifierWidth written)
SourceLocation getNameLoc() const
unsigned getExtraLocalDataAlignment() const
WrittenBuiltinSpecs & getWrittenBuiltinSpecs()
void setWrittenSignSpec(TypeSpecifierSign written)
bool hasWrittenSignSpec() const
unsigned getExtraLocalDataSize() const
bool hasWrittenTypeSpec() const
TypeSpecifierSign getWrittenSignSpec() const
void expandBuiltinRange(SourceRange Range)
Represents a C++ struct/union/class.
Declaration of a C++20 concept.
A reference to a concept and its template args, as it appears in the code.
const DeclarationNameInfo & getConceptNameInfo() const
A metaprogramming base class for TypeLoc classes which correspond to a particular Type subclass.
const TypeClass * getTypePtr() const
TypeLoc getInnerTypeLoc() const
unsigned getExtraLocalDataAlignment() const
HasNoInnerType getInnerType() const
void * getExtraLocalData() const
Gets a pointer past the Info structure; useful for classes with local data that can't be captured in ...
LocalData * getLocalData() const
unsigned getLocalDataAlignment() const
void * getNonLocalData() const
TypeLoc getNextTypeLoc() const
unsigned getExtraLocalDataSize() const
void copyLocal(Derived other)
unsigned getLocalDataSize() const
Expr * getCountExpr() const
bool isCountInBytes() const
SourceRange getLocalSourceRange() const
bool isCountInBytes() const
Expr * getCountExpr() const
Wrapper for source info for pointers decayed from arrays and functions.
SourceLocation getDecltypeLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
Expr * getUnderlyingExpr() const
SourceLocation getRParenLoc() const
void setRParenLoc(SourceLocation Loc)
void setDecltypeLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
Expr * getUnderlyingExpr() const
SourceLocation getTemplateNameLoc() const
void setTemplateNameLoc(SourceLocation Loc)
TypeLoc getPointeeTypeLoc() const
void setAttrNameLoc(SourceLocation loc)
SourceRange getLocalSourceRange() const
void setAttrOperandParensRange(SourceRange range)
QualType getInnerType() const
Returns the type before the address space attribute application area.
void setAttrExprOperand(Expr *e)
Expr * getAttrExprOperand() const
The attribute's expression operand, if it has one.
void initializeLocal(ASTContext &Context, SourceLocation loc)
SourceRange getAttrOperandParensRange() const
The location of the parentheses around the operand, if there is an operand.
SourceLocation getAttrNameLoc() const
The location of the attribute name, i.e.
QualType getPointeeType() const
void copy(DependentNameTypeLoc Loc)
NestedNameSpecifierLoc getQualifierLoc() const
SourceLocation getNameLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceRange getLocalSourceRange() const
SourceLocation getElaboratedKeywordLoc() const
void setNameLoc(SourceLocation Loc)
void setElaboratedKeywordLoc(SourceLocation Loc)
void setQualifierLoc(NestedNameSpecifierLoc QualifierLoc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getNameLoc() const
QualType getInnerType() const
TypeLoc getElementLoc() const
SourceRange getLocalSourceRange() const
void setNameLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
QualType getElementType() const
void setQualifierLoc(NestedNameSpecifierLoc QualifierLoc)
unsigned getNumArgs() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getTemplateNameLoc() const
SourceRange getLocalSourceRange() const
SourceLocation getLAngleLoc() const
unsigned getExtraLocalDataSize() const
void setTemplateKeywordLoc(SourceLocation Loc)
void copy(DependentTemplateSpecializationTypeLoc Loc)
SourceLocation getTemplateKeywordLoc() const
void setElaboratedKeywordLoc(SourceLocation Loc)
void setRAngleLoc(SourceLocation Loc)
TemplateArgumentLoc getArgLoc(unsigned i) const
SourceLocation getRAngleLoc() const
TemplateArgumentLocInfo getArgLocInfo(unsigned i) const
SourceLocation getElaboratedKeywordLoc() const
void setLAngleLoc(SourceLocation Loc)
void setArgLocInfo(unsigned i, TemplateArgumentLocInfo AI)
void setTemplateNameLoc(SourceLocation Loc)
NestedNameSpecifierLoc getQualifierLoc() const
unsigned getExtraLocalDataAlignment() const
ArrayRef< TemplateArgument > template_arguments() const
SourceLocation getNameLoc() const
SourceRange getLocalSourceRange() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
TypeLoc getElementLoc() const
void setNameLoc(SourceLocation Loc)
QualType getInnerType() const
QualType getElementType() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
unsigned getLocalDataAlignment() const
QualType getInnerType() const
SourceLocation getElaboratedKeywordLoc() const
NestedNameSpecifierLoc getQualifierLoc() const
void copy(ElaboratedTypeLoc Loc)
unsigned getLocalDataSize() const
SourceRange getLocalSourceRange() const
void setElaboratedKeywordLoc(SourceLocation Loc)
TypeLoc getNamedTypeLoc() const
void setQualifierLoc(NestedNameSpecifierLoc QualifierLoc)
NestedNameSpecifier * getQualifier() const
Retrieve the qualification on this type.
QualType getNamedType() const
Retrieve the type named by the qualified-id.
Wrapper for source info for enum types.
EnumDecl * getDecl() const
EnumDecl * getDecl() const
This represents one expression.
Wrapper for source info for functions.
ParmVarDecl ** getParmArray() const
QualType getInnerType() const
unsigned getNumParams() const
ParmVarDecl * getParam(unsigned i) const
SourceLocation getLocalRangeEnd() const
void setLocalRangeBegin(SourceLocation L)
void setLParenLoc(SourceLocation Loc)
SourceRange getExceptionSpecRange() const
void setParam(unsigned i, ParmVarDecl *VD)
ArrayRef< ParmVarDecl * > getParams() const
SourceRange getParensRange() const
void setRParenLoc(SourceLocation Loc)
unsigned getExtraLocalDataAlignment() const
void setLocalRangeEnd(SourceLocation L)
unsigned getExtraLocalDataSize() const
Returns the size of the type source info data block that is specific to this type.
void setExceptionSpecRange(SourceRange R)
TypeLoc getReturnLoc() const
SourceLocation getLocalRangeBegin() const
SourceRange getLocalSourceRange() const
SourceLocation getLParenLoc() const
SourceLocation getRParenLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
QualType getReturnType() const
One of these records is kept for each identifier that is lexed.
A metaprogramming class designed for concrete subtypes of abstract types where all subtypes share equ...
const TypeClass * getTypePtr() const
Wrapper for source info for injected class names of class templates.
CXXRecordDecl * getDecl() const
CXXRecordDecl * getDecl() const
void setAmpLoc(SourceLocation Loc)
SourceLocation getAmpLoc() const
const IdentifierInfo * getMacroIdentifier() const
SourceLocation getExpansionLoc() const
TypeLoc getInnerLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
void setExpansionLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
QualType getInnerType() const
QualType getUnderlyingType() const
const IdentifierInfo * getMacroIdentifier() const
Expr * getAttrColumnOperand() const
The attribute's column operand, if it has one.
SourceRange getAttrOperandParensRange() const
The location of the parentheses around the operand, if there is an operand.
void setAttrRowOperand(Expr *e)
SourceRange getLocalSourceRange() const
void setAttrColumnOperand(Expr *e)
void setAttrOperandParensRange(SourceRange range)
void setAttrNameLoc(SourceLocation loc)
SourceLocation getAttrNameLoc() const
The location of the attribute name, i.e.
void initializeLocal(ASTContext &Context, SourceLocation loc)
Expr * getAttrRowOperand() const
The attribute's row operand, if it has one.
Wrapper for source info for member pointers.
void initializeLocal(ASTContext &Context, SourceLocation Loc)
void setStarLoc(SourceLocation Loc)
TypeSourceInfo * getClassTInfo() const
SourceRange getLocalSourceRange() const
void setClassTInfo(TypeSourceInfo *TI)
SourceLocation getStarLoc() const
const Type * getClass() const
This represents a decl that may have a name.
A C++ nested-name-specifier augmented with source location information.
SourceLocation getBeginLoc() const
Retrieve the location of the beginning of this nested-name-specifier.
void * getOpaqueData() const
Retrieve the opaque pointer that refers to source-location data.
bool hasQualifier() const
Evaluates true when this nested-name-specifier location is non-empty.
NestedNameSpecifier * getNestedNameSpecifier() const
Retrieve the nested-name-specifier to which this instance refers.
SourceRange getSourceRange() const LLVM_READONLY
Retrieve the source range covering the entirety of this nested-name-specifier.
Represents an ObjC class declaration.
Wrapper for source info for ObjC interfaces.
void setNameLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
void setNameEndLoc(SourceLocation Loc)
ObjCInterfaceDecl * getIFaceDecl() const
SourceLocation getNameEndLoc() const
SourceLocation getNameLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
ObjCInterfaceDecl * getDecl() const
Get the declaration of this interface.
Wraps an ObjCPointerType with source location information.
SourceLocation getStarLoc() const
void setStarLoc(SourceLocation Loc)
unsigned getExtraLocalDataAlignment() const
void setTypeArgsRAngleLoc(SourceLocation Loc)
ObjCProtocolDecl * getProtocol(unsigned i) const
unsigned getExtraLocalDataSize() const
bool hasBaseTypeAsWritten() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getTypeArgsLAngleLoc() const
unsigned getNumTypeArgs() const
ArrayRef< SourceLocation > getProtocolLocs() const
unsigned getNumProtocols() const
void setTypeArgsLAngleLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
TypeSourceInfo * getTypeArgTInfo(unsigned i) const
void setTypeArgTInfo(unsigned i, TypeSourceInfo *TInfo)
void setProtocolLAngleLoc(SourceLocation Loc)
void setProtocolRAngleLoc(SourceLocation Loc)
SourceLocation getProtocolRAngleLoc() const
SourceLocation getProtocolLoc(unsigned i) const
void setHasBaseTypeAsWritten(bool HasBaseType)
void setProtocolLoc(unsigned i, SourceLocation Loc)
TypeLoc getBaseLoc() const
QualType getInnerType() const
SourceLocation getProtocolLAngleLoc() const
SourceLocation getTypeArgsRAngleLoc() const
ArrayRef< QualType > getTypeArgsAsWritten() const
Retrieve the type arguments of this object type as they were written.
QualType getBaseType() const
Gets the base type of this object type.
Represents an Objective-C protocol declaration.
SourceLocation getLocation() const
ObjCProtocolLoc(ObjCProtocolDecl *protocol, SourceLocation loc)
ObjCProtocolDecl * getProtocol() const
SourceRange getSourceRange() const LLVM_READONLY
The source range is just the protocol name.
unsigned getNumProtocols() const
Return the number of qualifying protocols in this type, or 0 if there are none.
qual_iterator qual_begin() const
Represents the declaration of an Objective-C type parameter.
ProtocolLAngleLoc, ProtocolRAngleLoc, and the source locations for protocol qualifiers are stored aft...
unsigned getExtraLocalDataAlignment() const
ObjCTypeParamDecl * getDecl() const
SourceRange getLocalSourceRange() const
unsigned getNumProtocols() const
SourceLocation getNameLoc() const
ObjCProtocolDecl * getProtocol(unsigned i) const
SourceLocation getProtocolLoc(unsigned i) const
ArrayRef< SourceLocation > getProtocolLocs() const
void setProtocolLoc(unsigned i, SourceLocation Loc)
void setProtocolLAngleLoc(SourceLocation Loc)
unsigned getExtraLocalDataSize() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getProtocolLAngleLoc() const
void setProtocolRAngleLoc(SourceLocation Loc)
void setNameLoc(SourceLocation Loc)
SourceLocation getProtocolRAngleLoc() const
ObjCTypeParamDecl * getDecl() const
SourceRange getLocalSourceRange() const
void setEllipsisLoc(SourceLocation Loc)
SourceLocation getEllipsisLoc() const
TypeLoc getPatternLoc() const
QualType getInnerType() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
QualType getPattern() const
Retrieve the pattern of this pack expansion, which is the type that will be repeatedly instantiated w...
SourceLocation getEllipsisLoc() const
Expr * getIndexExpr() const
TypeLoc getPatternLoc() const
QualType getPattern() const
QualType getInnerType() const
SourceRange getLocalSourceRange() const
void setEllipsisLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
QualType getPattern() const
Expr * getIndexExpr() const
void setRParenLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getRParenLoc() const
QualType getInnerType() const
SourceLocation getLParenLoc() const
SourceRange getLocalSourceRange() const
TypeLoc getInnerLoc() const
void setLParenLoc(SourceLocation Loc)
QualType getInnerType() const
Represents a parameter to a function.
TypeLoc getValueLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
QualType getInnerType() const
void setKWLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
SourceLocation getKWLoc() const
QualType getElementType() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceRange getLocalSourceRange() const
void setSigilLoc(SourceLocation Loc)
QualType getInnerType() const
TypeLoc getPointeeLoc() const
SourceLocation getSigilLoc() const
Wrapper for source info for pointers.
SourceLocation getStarLoc() const
void setStarLoc(SourceLocation Loc)
A (possibly-)qualified type.
bool hasLocalQualifiers() const
Determine whether this particular QualType instance has any qualifiers, without looking through any t...
const Type * getTypePtr() const
Retrieves a pointer to the underlying (unqualified) type.
static QualType getFromOpaquePtr(const void *Ptr)
Wrapper of type source information for a type with non-trivial direct qualifiers.
TypeLoc getNextTypeLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
Initializes the local data of this type source info block to provide no information.
unsigned getLocalDataSize() const
Returns the size of the type source info data block that is specific to this type.
unsigned getLocalDataAlignment() const
Returns the alignment of the type source info data block that is specific to this type.
void copyLocal(TypeLoc other)
SourceRange getLocalSourceRange() const
UnqualTypeLoc getUnqualifiedLoc() const
void setAmpAmpLoc(SourceLocation Loc)
SourceLocation getAmpAmpLoc() const
Represents a struct/union/class.
Wrapper for source info for record types.
RecordDecl * getDecl() const
RecordDecl * getDecl() const
QualType getInnerType() const
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
A trivial tuple used to represent a source range.
void setBegin(SourceLocation b)
SourceLocation getEnd() const
SourceLocation getBegin() const
void setEnd(SourceLocation e)
Wrapper for substituted template type parameters.
Wrapper for substituted template type parameters.
Represents the declaration of a struct/union/class/enum.
Wrapper for source info for tag types.
TagDecl * getDecl() const
bool isDefinition() const
True if the tag was defined in this type specifier.
TagDecl * getDecl() const
Location wrapper for a TemplateArgument.
unsigned getNumArgs() const
static void initializeArgLocs(ASTContext &Context, ArrayRef< TemplateArgument > Args, TemplateArgumentLocInfo *ArgInfos, SourceLocation Loc)
void setArgLocInfo(unsigned i, TemplateArgumentLocInfo AI)
SourceLocation getLAngleLoc() const
TemplateArgumentLocInfo getArgLocInfo(unsigned i) const
void setTemplateKeywordLoc(SourceLocation Loc)
TemplateArgumentLoc getArgLoc(unsigned i) const
SourceRange getLocalSourceRange() const
SourceLocation getRAngleLoc() const
void setTemplateNameLoc(SourceLocation Loc)
void setLAngleLoc(SourceLocation Loc)
SourceLocation getTemplateNameLoc() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
void copy(TemplateSpecializationTypeLoc Loc)
unsigned getExtraLocalDataAlignment() const
SourceLocation getTemplateKeywordLoc() const
void setRAngleLoc(SourceLocation Loc)
unsigned getExtraLocalDataSize() const
ArrayRef< TemplateArgument > template_arguments() const
Declaration of a template type parameter.
Wrapper for template type parameters.
TemplateTypeParmDecl * getDecl() const
TemplateTypeParmDecl * getDecl() const
Base wrapper for a particular "section" of type source info.
SourceLocation findNullabilityLoc() const
Find the location of the nullability specifier (__nonnull, __nullable, or __null_unspecifier),...
UnqualTypeLoc getUnqualifiedLoc() const
Skips past any qualifiers, if this is qualified.
static unsigned getLocalAlignmentForType(QualType Ty)
Returns the alignment of type source info data block for the given type.
TypeLoc findExplicitQualifierLoc() const
Find a type with the location of an explicit type qualifier.
QualType getType() const
Get the type for which this source info wrapper provides information.
TypeLoc getNextTypeLoc() const
Get the next TypeLoc pointed by this TypeLoc, e.g for "int*" the TypeLoc is a PointerLoc and next Typ...
T getAs() const
Convert to the specified TypeLoc type, returning a null TypeLoc if this TypeLoc is not of the desired...
friend bool operator==(const TypeLoc &LHS, const TypeLoc &RHS)
TypeLoc IgnoreParens() const
T castAs() const
Convert to the specified TypeLoc type, asserting that this TypeLoc is of the desired type.
TypeLoc(QualType ty, void *opaqueData)
void initializeFullCopy(TypeLoc Other)
Initializes this by copying its information from another TypeLoc of the same type.
SourceRange getSourceRange() const LLVM_READONLY
Get the full source range.
SourceRange getLocalSourceRange() const
Get the local source range.
void initializeFullCopy(TypeLoc Other, unsigned Size)
Initializes this by copying its information from another TypeLoc of the same type.
unsigned getFullDataSize() const
Returns the size of the type source info data block.
AutoTypeLoc getContainedAutoTypeLoc() const
Get the typeloc of an AutoType whose type will be deduced for a variable with an initializer of this ...
TypeLoc(const Type *ty, void *opaqueData)
void * getOpaqueData() const
Get the pointer where source information is stored.
TypeLocClass
The kinds of TypeLocs.
SourceLocation getTemplateKeywordLoc() const
Get the SourceLocation of the template keyword (if any).
void copy(TypeLoc other)
Copies the other type loc into this one.
TypeLocClass getTypeLocClass() const
static unsigned getFullDataSizeForType(QualType Ty)
Returns the size of type source info data block for the given type.
void initialize(ASTContext &Context, SourceLocation Loc) const
Initializes this to state that every location in this type is the given location.
SourceLocation getEndLoc() const
Get the end source location.
T getAsAdjusted() const
Convert to the specified TypeLoc type, returning a null TypeLoc if this TypeLoc is not of the desired...
friend bool operator!=(const TypeLoc &LHS, const TypeLoc &RHS)
SourceLocation getBeginLoc() const
Get the begin source location.
const Type * getTypePtr() const
SourceRange getLocalSourceRange() const
Expr * getUnderlyingExpr() const
void initializeLocal(ASTContext &Context, SourceLocation Loc)
void setUnmodifiedTInfo(TypeSourceInfo *TI) const
TypeSourceInfo * getUnmodifiedTInfo() const
QualType getUnmodifiedType() const
A container of type source information.
TypeLoc getTypeLoc() const
Return the TypeLoc wrapper for the type source info.
A reasonable base class for TypeLocs that correspond to types that are written as a type-specifier.
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceLocation getNameLoc() const
void setNameLoc(SourceLocation Loc)
SourceRange getLocalSourceRange() const
ElaboratedTypeKeyword getKeyword() const
The base class of the type hierarchy.
TypeClass getTypeClass() const
Base class for declarations which introduce a typedef-name.
Wrapper for source info for typedefs.
TypedefNameDecl * getTypedefNameDecl() const
TypedefNameDecl * getDecl() const
void setParensRange(SourceRange range)
SourceRange getLocalSourceRange() const
SourceLocation getLParenLoc() const
SourceLocation getRParenLoc() const
SourceRange getParensRange() const
void setLParenLoc(SourceLocation Loc)
SourceLocation getTypeofLoc() const
void setTypeofLoc(SourceLocation Loc)
void setRParenLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
Wrapper of type source information for a type with no direct qualifiers.
TypeLocClass getTypeLocClass() const
UnqualTypeLoc(const Type *Ty, void *Data)
const Type * getTypePtr() const
Wrapper for source info for unresolved typename using decls.
UnresolvedUsingTypenameDecl * getDecl() const
UnresolvedUsingTypenameDecl * getDecl() const
Represents a dependent using declaration which was marked with typename.
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
Wrapper for source info for types used via transparent aliases.
QualType getUnderlyingType() const
UsingShadowDecl * getFoundDecl() const
UsingShadowDecl * getFoundDecl() const
QualType getUnderlyingType() const
TypeLoc getElementLoc() const
void setNameLoc(SourceLocation Loc)
void initializeLocal(ASTContext &Context, SourceLocation Loc)
SourceRange getLocalSourceRange() const
QualType getInnerType() const
SourceLocation getNameLoc() const
QualType getElementType() const
The JSON file list parser is used to communicate input to InstallAPI.
TypeSpecifierType
Specifies the kind of type.
AutoTypeKeyword
Which keyword(s) were used to create an AutoType.
TypeSpecifierWidth
Specifies the width of a type, e.g., short, long, or long long.
TypeSpecifierSign
Specifies the signedness of a type, e.g., signed or unsigned.
const FunctionProtoType * T
@ None
No keyword precedes the qualified type name.
@ Other
Other implicit parameter.
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
SourceLocation LBracketLoc
SourceLocation RBracketLoc
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
SourceLocation DecltypeLoc
SourceRange OperandParens
SourceLocation TemplateKWLoc
SourceLocation ElaboratedKWLoc
void * QualifierData
Data associated with the nested-name-specifier location.
SourceLocation LocalRangeEnd
SourceLocation LocalRangeBegin
SourceLocation ExpansionLoc
SourceRange OperandParens
TypeSourceInfo * ClassTInfo
SourceLocation NameEndLoc
SourceLocation TypeArgsLAngleLoc
SourceLocation ProtocolLAngleLoc
SourceLocation TypeArgsRAngleLoc
bool HasBaseTypeAsWritten
SourceLocation ProtocolRAngleLoc
SourceLocation EllipsisLoc
SourceLocation EllipsisLoc
Location information for a TemplateArgument.
SourceLocation TemplateKWLoc
TypeSourceInfo * UnmodifiedTInfo
Structure that packs information about the type specifiers that were written in a particular type spe...