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);
198 initializeImpl(Context, *
this, Loc);
225 return !(LHS == RHS);
233 static bool isKind(
const TypeLoc&) {
237 static void initializeImpl(ASTContext &Context,
TypeLoc TL,
241 static SourceRange getLocalSourceRangeImpl(
TypeLoc TL);
244inline TypeSourceInfo::TypeSourceInfo(QualType ty,
size_t DataSize) : Ty(ty) {
246 memset(
static_cast<void *
>(
this + 1), 0, DataSize);
252 return TypeLoc(Ty,
const_cast<void*
>(
static_cast<const void*
>(
this + 1)));
263 return reinterpret_cast<const Type*
>(
Ty);
273 static bool isKind(
const TypeLoc &TL) {
291 dataInt = llvm::alignTo(dataInt, align);
327 static bool isKind(
const TypeLoc &TL) {
335 return castAs<UnqualTypeLoc>();
366template <
class Base,
class Derived,
class TypeClass,
class LocalData>
370 const Derived *asDerived()
const {
371 return static_cast<const Derived*
>(
this);
374 static bool isKind(
const TypeLoc &TL) {
379 static bool classofType(
const Type *Ty) {
380 return TypeClass::classof(Ty);
385 return std::max(
unsigned(
alignof(LocalData)),
390 unsigned size =
sizeof(LocalData);
391 unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
392 size = llvm::alignTo(size, extraAlign);
393 size += asDerived()->getExtraLocalDataSize();
416 return cast<TypeClass>(Base::getTypePtr());
429 return static_cast<LocalData*
>(Base::Data);
436 unsigned size =
sizeof(LocalData);
437 unsigned extraAlign = asDerived()->getExtraLocalDataAlignment();
438 size = llvm::alignTo(size, extraAlign);
439 return reinterpret_cast<char *
>(Base::Data) + size;
443 auto data =
reinterpret_cast<uintptr_t>(Base::Data);
444 data += asDerived()->getLocalDataSize();
445 data = llvm::alignTo(data, getNextTypeAlign());
446 return reinterpret_cast<void*
>(data);
457 unsigned getInnerTypeSize()
const {
461 unsigned getInnerTypeSize(HasNoInnerType _)
const {
465 unsigned getInnerTypeSize(QualType _)
const {
469 unsigned getNextTypeAlign()
const {
473 unsigned getNextTypeAlign(HasNoInnerType _)
const {
477 unsigned getNextTypeAlign(QualType T)
const {
491template <
class Base,
class Derived,
class TypeClass>
495 static bool classofType(
const Type *Ty) {
496 return TypeClass::classof(Ty);
499 static bool isKind(
const TypeLoc &TL) {
503 static bool isKind(
const UnqualTypeLoc &TL) {
504 return Derived::classofType(TL.getTypePtr());
509 return cast<TypeClass>(Base::getTypePtr());
548 static bool isKind(
const TypeLoc &TL);
572 BuiltinRange = Range;
575 BuiltinRange.
setEnd(std::max(Range.getEnd(), BuiltinRange.
getEnd()));
590 return (bk >= BuiltinType::UShort && bk <= BuiltinType::UInt128) ||
591 (bk >= BuiltinType::Short && bk <= BuiltinType::Ibm128) ||
592 bk == BuiltinType::UChar || bk == BuiltinType::SChar;
676 UsingTypeLoc, UsingType> {
698 InjectedClassNameTypeLoc,
699 InjectedClassNameType> {
709 UnresolvedUsingTypeLoc,
710 UnresolvedUsingType> {
751 TemplateTypeParmTypeLoc,
752 TemplateTypeParmType> {
764 ObjCTypeParamTypeLoc,
766 ObjCTypeParamTypeLocInfo> {
809 return getProtocolLocArray()[i];
814 getProtocolLocArray()[i] = Loc;
850 SubstTemplateTypeParmTypeLoc,
851 SubstTemplateTypeParmType> {
857 SubstTemplateTypeParmPackTypeLoc,
858 SubstTemplateTypeParmPackType> {
896 return dyn_cast_or_null<T>(
getAttr());
915 BTFTagAttributedType, BTFTagAttributedLocInfo> {
923 return dyn_cast_or_null<T>(
getAttr());
949 ObjCObjectTypeLocInfo> {
984 return getTypeArgLocArray()[i];
989 getTypeArgLocArray()[i] = TInfo;
1014 return getProtocolLocArray()[i];
1019 getProtocolLocArray()[i] = Loc;
1063 "not enough alignment for tail-allocated data");
1079 ObjCInterfaceTypeLoc,
1081 ObjCInterfaceLocInfo> {
1119 MacroQualifiedType, MacroQualifiedLocInfo> {
1190 if (ParenTypeLoc::isKind(*
this))
1191 return IgnoreParensImpl(*
this);
1198 AdjustedType, AdjustedLocInfo> {
1226 AdjustedTypeLoc, DecayedTypeLoc, DecayedType> {
1234template <
class Derived,
class TypeClass,
class LocalData = Po
interLikeLocInfo>
1236 TypeClass, LocalData> {
1296 MemberPointerLocInfo> {
1334 ObjCObjectPointerType> {
1349 return getTypePtr()->getPointeeTypeAsWritten();
1355 LValueReferenceTypeLoc,
1356 LValueReferenceType> {
1369 RValueReferenceTypeLoc,
1370 RValueReferenceType> {
1393 bool hasExceptionSpec()
const {
1394 if (
auto *FPT = dyn_cast<FunctionProtoType>(
getTypePtr())) {
1395 return FPT->hasExceptionSpec();
1401 assert(hasExceptionSpec() &&
"No exception spec range");
1445 if (hasExceptionSpec())
1446 return *getExceptionSpecRangePtr();
1451 if (hasExceptionSpec())
1452 *getExceptionSpecRangePtr() = R;
1467 return cast<FunctionProtoType>(
getTypePtr())->getNumParams();
1488 if (hasExceptionSpec())
1495 unsigned ExceptSpecSize = hasExceptionSpec() ?
sizeof(
SourceRange) : 0;
1506 FunctionProtoTypeLoc,
1507 FunctionProtoType> {
1512 FunctionNoProtoTypeLoc,
1513 FunctionNoProtoType> {
1574 ConstantArrayTypeLoc,
1575 ConstantArrayType> {
1580 IncompleteArrayTypeLoc,
1581 IncompleteArrayType> {
1586 DependentSizedArrayTypeLoc,
1587 DependentSizedArrayType> {
1597 VariableArrayTypeLoc,
1598 VariableArrayType> {
1614 TemplateSpecializationTypeLoc,
1615 TemplateSpecializationType,
1616 TemplateSpecializationLocInfo> {
1647 getArgInfos()[i] = AI;
1651 return getArgInfos()[i];
1692 getArgInfos(), Loc);
1722 DependentAddressSpaceTypeLoc,
1723 DependentAddressSpaceType,
1724 DependentAddressSpaceLocInfo> {
1796 VectorType, VectorTypeLocInfo> {
1819 DependentVectorType, VectorTypeLocInfo> {
1846 :
public ConcreteTypeLoc<UnqualTypeLoc, DependentSizedExtVectorTypeLoc,
1847 DependentSizedExtVectorType, VectorTypeLocInfo> {
1874 MatrixType, MatrixTypeLocInfo> {
1921 ConstantMatrixType> {};
1925 DependentSizedMatrixTypeLoc,
1926 DependentSizedMatrixType> {};
1947template <
class Derived,
class TypeClass,
class LocalData = TypeofLocInfo>
1949 :
public ConcreteTypeLoc<UnqualTypeLoc, Derived, TypeClass, LocalData> {
1997 TypeOfExprTypeLocInfo> {
2013 return this->
getTypePtr()->getUnmodifiedType();
2037 :
public ConcreteTypeLoc<UnqualTypeLoc, DecltypeTypeLoc, DecltypeType,
2038 DecltypeTypeLocInfo> {
2066 UnaryTransformTypeLoc,
2068 UnaryTransformTypeLocInfo> {
2140 return CR->getNestedNameSpecifierLoc();
2146 return CR->getTemplateKWLoc();
2152 return CR->getConceptNameLoc();
2158 return CR->getFoundDecl();
2164 return CR->getNamedConcept();
2176 ->getTemplateArgsAsWritten()
2183 if (
const auto *TAAW = CR->getTemplateArgsAsWritten())
2184 return TAAW->getLAngleLoc();
2190 if (
const auto *TAAW = CR->getTemplateArgsAsWritten())
2191 return TAAW->getRAngleLoc();
2201 assert(CR &&
"No ConceptReference");
2202 return CR->getTemplateArgsAsWritten()->getTemplateArgs()[i];
2226 DeducedTemplateSpecializationTypeLoc,
2227 DeducedTemplateSpecializationType> {
2248 ElaboratedLocInfo> {
2271 "Inconsistent nested-name-specifier pointer");
2326 DependentNameTypeLoc,
2328 DependentNameLocInfo> {
2346 "Inconsistent nested-name-specifier pointer");
2383 DependentTemplateSpecializationTypeLoc,
2384 DependentTemplateSpecializationType,
2385 DependentTemplateSpecializationLocInfo> {
2404 if (!QualifierLoc) {
2415 "Inconsistent nested-name-specifier pointer");
2456 getArgInfos()[i] = AI;
2460 return getArgInfos()[i];
2507 PackExpansionType, PackExpansionTypeLocInfo> {
2539 AtomicType, AtomicTypeLocInfo> {
2614template <
typename T>
2617 while (!T::isKind(Cur)) {
2619 Cur = PTL.getInnerLoc();
2621 Cur = ATL.getModifiedLoc();
2623 Cur = ATL.getWrappedLoc();
2625 Cur = ETL.getNamedTypeLoc();
2627 Cur = ATL.getOriginalLoc();
2629 Cur = MQL.getInnerLoc();
2633 return Cur.
getAs<T>();
2640 DependentBitIntType> {};
2648 : 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 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.
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)
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
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 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...
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.
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
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.
@ 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
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...