22 using namespace clang;
25 assert(S &&
"Expecting non-null pointer.");
30 assert(II &&
"Expecting non-null pointer.");
39 AddDeclarationNameImpl(Name);
48 auto Result = DeclNameMap.insert(std::make_pair(Name, DeclNameMap.size()));
49 ID.AddInteger(
Result.first->second);
74 ID.AddInteger(NumArgs);
75 for (
unsigned i = 0;
i < NumArgs; ++
i) {
110 assert(NNS &&
"Expecting non-null pointer.");
163 llvm_unreachable(
"Expected valid TemplateArgument");
190 assert(TPL &&
"Expecting non-null pointer.");
192 ID.AddInteger(TPL->
size());
193 for (
auto *ND : TPL->
asArray()) {
208 const unsigned unsigned_bits =
sizeof(unsigned) *
CHAR_BIT;
209 const unsigned size = Bools.size();
210 const unsigned remainder = size % unsigned_bits;
211 const unsigned loops = size / unsigned_bits;
212 auto I = Bools.rbegin();
219 ID.AddInteger(value);
221 for (
unsigned i = 0;
i < loops; ++
i) {
223 for (
unsigned j = 0; j < unsigned_bits; ++j) {
228 ID.AddInteger(value);
231 assert(I == Bools.rend());
233 return ID.ComputeHash();
241 llvm::FoldingSetNodeID &ID;
245 ODRDeclVisitor(llvm::FoldingSetNodeID &ID,
ODRHash &Hash)
246 : ID(ID), Hash(Hash) {}
277 void Visit(
const Decl *D) {
282 void VisitNamedDecl(
const NamedDecl *D) {
284 Inherited::VisitNamedDecl(D);
287 void VisitValueDecl(
const ValueDecl *D) {
288 if (!isa<FunctionDecl>(D)) {
291 Inherited::VisitValueDecl(D);
294 void VisitVarDecl(
const VarDecl *D) {
297 const bool HasInit = D->
hasInit();
302 Inherited::VisitVarDecl(D);
307 Inherited::VisitParmVarDecl(D);
312 Inherited::VisitAccessSpecDecl(D);
319 Inherited::VisitStaticAssertDecl(D);
322 void VisitFieldDecl(
const FieldDecl *D) {
333 Inherited::VisitFieldDecl(D);
340 Inherited::VisitFunctionDecl(D);
346 Inherited::VisitCXXMethodDecl(D);
352 Inherited::VisitTypedefNameDecl(D);
356 Inherited::VisitTypedefDecl(D);
360 Inherited::VisitTypeAliasDecl(D);
375 const bool hasDefaultArgument =
378 if (hasDefaultArgument) {
383 Inherited::VisitTemplateTypeParmDecl(D);
388 const bool hasDefaultArgument =
391 if (hasDefaultArgument) {
396 Inherited::VisitNonTypeTemplateParmDecl(D);
401 const bool hasDefaultArgument =
404 if (hasDefaultArgument) {
409 Inherited::VisitTemplateTemplateParmDecl(D);
415 Inherited::VisitTemplateDecl(D);
420 Inherited::VisitRedeclarableTemplateDecl(D);
426 Inherited::VisitFunctionTemplateDecl(D);
431 Inherited::VisitEnumConstantDecl(D);
445 case Decl::AccessSpec:
446 case Decl::CXXConstructor:
447 case Decl::CXXDestructor:
448 case Decl::CXXMethod:
449 case Decl::EnumConstant:
452 case Decl::FunctionTemplate:
453 case Decl::StaticAssert:
454 case Decl::TypeAlias:
462 assert(D &&
"Expecting non-null pointer.");
464 ODRDeclVisitor(ID, *
this).Visit(D);
469 "Expected non-null record to be a definition.");
473 if (isa<ClassTemplateSpecializationDecl>(DC)) {
486 Decls.push_back(SubDecl);
487 if (
auto *Function = dyn_cast<FunctionDecl>(SubDecl)) {
489 Function->getODRHash();
494 ID.AddInteger(Decls.size());
495 for (
auto SubDecl : Decls) {
506 auto Bases = Record->
bases();
507 for (
auto Base : Bases) {
509 ID.AddInteger(
Base.isVirtual());
510 ID.AddInteger(
Base.getAccessSpecifierAsWritten());
516 assert(Function &&
"Expecting non-null pointer.");
521 if (isa<ClassTemplateSpecializationDecl>(DC))
return;
522 if (
auto *F = dyn_cast<FunctionDecl>(DC)) {
523 if (F->isFunctionTemplateSpecialization()) {
524 if (!isa<CXXMethodDecl>(DC))
return;
537 if (SpecializationArgs) {
538 ID.AddInteger(SpecializationArgs->size());
544 if (
const auto *Method = dyn_cast<CXXMethodDecl>(Function)) {
577 auto *Body = Function->
getBody();
585 for (
Decl *SubDecl : Function->
decls()) {
587 Decls.push_back(SubDecl);
591 ID.AddInteger(Decls.size());
592 for (
auto SubDecl : Decls) {
613 assert(isa<EnumConstantDecl>(SubDecl) &&
"Unexpected Decl");
614 Decls.push_back(SubDecl);
618 ID.AddInteger(Decls.size());
619 for (
auto SubDecl : Decls) {
626 assert(D &&
"Expecting non-null pointer.");
638 const auto *Specialization =
641 if (Specialization) {
643 ID.AddInteger(List.
size());
652 class ODRTypeVisitor :
public TypeVisitor<ODRTypeVisitor> {
654 llvm::FoldingSetNodeID &ID;
658 ODRTypeVisitor(llvm::FoldingSetNodeID &ID,
ODRHash &Hash)
659 : ID(ID), Hash(Hash) {}
706 static const Type *RemoveTypedef(
const Type *T) {
719 const auto *ElaboratedT = dyn_cast<
ElaboratedType>(UnderlyingType);
724 if (ElaboratedT->getQualifier() !=
nullptr) {
728 QualType NamedType = ElaboratedT->getNamedType();
733 const auto *RecordT = dyn_cast<
RecordType>(NamedType);
738 const IdentifierInfo *TypedefII = TypedefT->getDecl()->getIdentifier();
739 const IdentifierInfo *RecordII = RecordT->getDecl()->getIdentifier();
740 if (!TypedefII || !RecordII ||
748 void Visit(
const Type *T) {
749 T = RemoveTypedef(T);
754 void VisitType(
const Type *T) {}
764 if (
auto Pointer = dyn_cast<PointerType>(split.
Ty)) {
765 if (
Pointer->getPointeeType() == Original) {
787 VisitAdjustedType(T);
790 void VisitArrayType(
const ArrayType *T) {
845 VisitDecltypeType(T);
853 void VisitAutoType(
const AutoType *T) {
858 void VisitDeducedTemplateSpecializationType(
886 VisitFunctionType(T);
894 VisitFunctionType(T);
917 ID.AddInteger(TypeArgs.size());
918 for (
auto Arg : TypeArgs) {
923 ID.AddInteger(Protocols.size());
924 for (
auto Protocol : Protocols) {
935 VisitObjCObjectType(T);
941 ID.AddInteger(Protocols.size());
942 for (
auto Protocol : Protocols) {
954 void VisitParenType(
const ParenType *T) {
959 void VisitPipeType(
const PipeType *T) {
976 VisitReferenceType(T);
980 VisitReferenceType(T);
996 void VisitTagType(
const TagType *T) {
1001 void VisitRecordType(
const RecordType *T) { VisitTagType(T); }
1002 void VisitEnumType(
const EnumType *T) { VisitTagType(T); }
1023 VisitQualifiers(UnderlyingType.getQualifiers());
1026 dyn_cast<TypedefType>(UnderlyingType.getTypePtr())) {
1027 UnderlyingType = Underlying->getDecl()->getUnderlyingType();
1031 dyn_cast<ElaboratedType>(UnderlyingType.getTypePtr())) {
1032 UnderlyingType = Underlying->getNamedType();
1038 AddType(UnderlyingType.getTypePtr());
1063 VisitTypeWithKeyword(T);
1066 void VisitDependentTemplateSpecializationType(
1074 VisitTypeWithKeyword(T);
1080 VisitTypeWithKeyword(T);
1108 assert(T &&
"Expecting non-null pointer.");
1109 ODRTypeVisitor(ID, *
this).Visit(T);
1122 Bools.push_back(Value);
QualType getPattern() const
Retrieve the pattern of this pack expansion, which is the type that will be repeatedly instantiated w...
QualType getDeducedType() const
Get the type deduced for this placeholder type, or null if it's either not been deduced or was deduce...
Represents a type that was referred to using an elaborated type keyword, e.g., struct S...
const Type * Ty
The locally-unqualified type.
Represents a function declaration or definition.
Smart pointer class that efficiently represents Objective-C method names.
PointerType - C99 6.7.5.1 - Pointer Declarators.
ArrayRef< QualType > getTypeArgsAsWritten() const
Retrieve the type arguments of this object type as they were written.
QualType getElementType() const
QualType getPointeeType() const
Represents the dependent type named by a dependently-scoped typename using declaration, e.g.
A (possibly-)qualified type.
void AddBoolean(bool value)
unsigned getNumBases() const
Retrieves the number of base classes of this class.
void AddDeclarationName(DeclarationName Name, bool TreatAsDecl=false)
This file contains the declaration of the ODRHash class, which calculates a hash based on AST nodes...
void Profile(llvm::FoldingSetNodeID &ID) const
Expr * getUnderlyingExpr() const
Stmt - This represents one statement.
Expr * getBitWidth() const
void AddQualType(QualType T)
FunctionType - C99 6.7.5.3 - Function Declarators.
An instance of this object exists for each enum constant that is defined.
Represents the declaration of a typedef-name via the 'typedef' type specifier.
Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in...
Represents a qualified type name for which the type name is dependent.
The template argument is an expression, and we've not resolved it to one of the other forms yet...
unsigned size() const
Retrieve the number of template arguments in this template argument list.
NestedNameSpecifier * getQualifier() const
Retrieve the qualification on this type.
Decl - This represents one declaration (or definition), e.g.
TagDecl * getDecl() const
ArrayRef< NamedDecl * > asArray()
Selector getObjCSelector() const
Get the Objective-C selector stored in this declaration name.
NestedNameSpecifier * getPrefix() const
Return the prefix of this nested name specifier.
OverloadedOperatorKind getCXXOverloadedOperator() const
If this name is the name of an overloadable operator in C++ (e.g., operator+), retrieve the kind of o...
Represents a C++11 auto or C++14 decltype(auto) type.
The base class of the type hierarchy.
Represents an array type, per C99 6.7.5.2 - Array Declarators.
The template argument is a declaration that was provided for a pointer, reference, or pointer to member non-type template parameter.
A container of type source information.
bool isEmpty() const
Evaluates true when this declaration name is empty.
TemplateTypeParmDecl * getDecl() const
A template template parameter that has been substituted for some other template name.
bool isVirtualAsWritten() const
Whether this function is marked as virtual explicitly.
size_t param_size() const
QualType getElementType() const
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template...
TemplateName getTemplateName() const
Retrieve the name of the template that we are deducing.
An identifier, stored as an IdentifierInfo*.
FriendDecl - Represents the declaration of a friend entity, which can be a function, a type, or a templated function or type.
Represents a variable declaration or definition.
Declaration of a redeclarable template.
ArrayRef< ObjCProtocolDecl * > getProtocols() const
Retrieve all of the protocol qualifiers.
QualType getReturnType() const
unsigned getNumParams() const
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
Represents an empty template argument, e.g., one that has not been deduced.
decl_range decls() const
decls_begin/decls_end - Iterate over the declarations stored in this context.
Represents a C++17 deduced template specialization type.
A namespace, stored as a NamespaceDecl*.
Stores a list of template parameters for a TemplateDecl and its derived classes.
SpecifierKind getKind() const
Determine what kind of nested name specifier is stored.
void AddTemplateArgument(TemplateArgument TA)
bool hasDefinition() const
Represents a parameter to a function.
Represents the result of substituting a type for a template type parameter.
The collection of all-type qualifiers we support.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
QualType getOriginalType() const
TypeSourceInfo * getIntegerTypeSourceInfo() const
Return the type source info for the underlying integer type, if no type source info exists...
Represents a class template specialization, which refers to a class template with a given set of temp...
One of these records is kept for each identifier that is lexed.
TypeSourceInfo * getFriendType() const
If this friend declaration names an (untemplated but possibly dependent) type, return the type; other...
StringLiteral * getMessage()
Represents a class type in Objective C.
QualType getPointeeType() const
Expr * getAsExpr() const
Retrieve the template argument as an expression.
ArrayRef< QualType > getParamTypes() const
The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...
TemplateDecl * getAsTemplateDecl() const
Retrieve the underlying template declaration that this template name refers to, if known...
NameKind getNameKind() const
Determine what kind of name this is.
Represents a member of a struct/union/class.
TemplateName getTemplateName() const
Retrieve the name of the template that we are specializing.
const Type * getAsType() const
Retrieve the type stored in this nested name specifier.
NamedDecl * getFriendDecl() const
If this friend declaration doesn't name a type, return the inner declaration.
Represents the result of substituting a set of types for a template type parameter pack...
void AddTemplateParameterList(const TemplateParameterList *TPL)
Represents an access specifier followed by colon ':'.
ArrayRef< ParmVarDecl * > parameters() const
bool isUnarySelector() const
An rvalue reference type, per C++11 [dcl.ref].
UnresolvedUsingTypenameDecl * getDecl() const
bool isBitField() const
Determines whether this field is a bitfield.
IdentifierInfo * getAsIdentifier() const
Retrieve the identifier stored in this nested name specifier.
A qualified template name, where the qualification is kept to describe the source code as written...
Stmt * getBody(const FunctionDecl *&Definition) const
Retrieve the body (definition) of the function.
void AddDecl(const Decl *D)
void AddFunctionDecl(const FunctionDecl *Function, bool SkipBody=false)
An unqualified-id that has been assumed to name a function template that will be found by ADL...
bool isMemberSpecialization() const
Determines whether this template was a specialization of a member template.
NamespaceAliasDecl * getAsNamespaceAlias() const
Retrieve the namespace alias stored in this nested name specifier.
Represents a typeof (or typeof) expression (a GCC extension).
const Type * getClass() const
CXXRecordDecl * getDecl() const
bool isConstexpr() const
Whether this variable is (C++11) constexpr.
#define remainder(__x, __y)
Expr * getSizeExpr() const
const Expr * getInitExpr() const
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
ObjCInterfaceDecl * getInterface() const
Gets the interface declaration for this object type, if the base type really is an interface...
bool isParameterPack() const
Whether this template template parameter is a template parameter pack.
Expr * getSizeExpr() const
QualType getPointeeTypeAsWritten() const
virtual Decl * getCanonicalDecl()
Retrieves the "canonical" declaration of the given declaration.
QualType getElementType() const
Represents an extended vector type where either the type or size is dependent.
void AddTemplateName(TemplateName Name)
Represents a K&R-style 'int foo()' function, which has no information available about its arguments...
Expr * getAddrSpaceExpr() const
Represents the declaration of a typedef-name via a C++11 alias-declaration.
Represents a prototype with parameter type info, e.g.
A dependent template name that has not been resolved to a template (or set of templates).
bool isParameterPack() const
Whether this parameter is a non-type template parameter pack.
ObjCTypeParamDecl * getDecl() const
ValueDecl * getAsDecl() const
Retrieve the declaration for a declaration non-type template argument.
Represents an array type in C++ whose size is a value-dependent expression.
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
DeclContext * getLexicalParent()
getLexicalParent - Returns the containing lexical DeclContext.
QualType getElementType() const
bool isInlineSpecified() const
Determine whether the "inline" keyword was specified for this function.
QualType getCXXNameType() const
If this name is one of the C++ names (of a constructor, destructor, or conversion function)...
unsigned getNumArgs() const
Retrieve the number of template arguments.
NamespaceDecl * getAsNamespace() const
Retrieve the namespace stored in this nested name specifier.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
bool isDefaulted() const
Whether this function is defaulted per C++0x.
unsigned getAsOpaqueValue() const
bool isScopedUsingClassTag() const
Returns true if this is a C++11 scoped enumeration.
Declaration of a template type parameter.
unsigned getIndex() const
Internal representation of canonical, dependent decltype(expr) types.
The template argument is a null pointer or null pointer to member that was provided for a non-type te...
bool isThisDeclarationADefinition() const
Returns whether this specific declaration of the function is also a definition that does not contain ...
bool isImplicit() const
isImplicit - Indicates whether the declaration was implicitly generated by the implementation.
const TemplateArgumentList * getTemplateSpecializationArgs() const
Retrieve the template arguments used to produce this function template specialization from the primar...
bool isFileContext() const
DeclContext * getDeclContext()
const IdentifierInfo * getIdentifier() const
Retrieve the type named by the typename specifier as an identifier.
void ProcessODRHash(llvm::FoldingSetNodeID &ID, ODRHash &Hash) const
Calculate a unique representation for a statement that is stable across compiler invocations.
StorageClass getStorageClass() const
Returns the storage class as written in the source.
ArrayRef< TemplateArgument > asArray() const
Produce this as an array ref.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
Represents a C++ template name within the type system.
Represents the type decltype(expr) (C++11).
A namespace alias, stored as a NamespaceAliasDecl*.
IdentifierInfo * getAsIdentifierInfo() const
Retrieve the IdentifierInfo * stored in this declaration name, or null if this declaration name isn't...
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...
QualType desugar() const
Remove a single level of sugar.
Qualifiers Quals
The local qualifiers.
DeclContext * getParent()
getParent - Returns the containing DeclContext.
A helper class for Type nodes having an ElaboratedTypeKeyword.
Represents a GCC generic vector type.
ArraySizeModifier getSizeModifier() const
An lvalue reference type, per C++11 [dcl.ref].
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
unsigned getNumArgs() const
Common base class for placeholders for types that get replaced by placeholder type deduction: C++11 a...
The result type of a method or function.
bool isNull() const
Return true if this QualType doesn't point to a type yet.
A type, stored as a Type*.
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template...
Expr * getUnderlyingExpr() const
SplitQualType split() const
Divides a QualType into its unqualified type and a set of local qualifiers.
A template template parameter pack that has been substituted for a template template argument pack...
Decl::Kind getDeclKind() const
ElaboratedTypeKeyword getKeyword() const
IdentifierInfo * getIdentifierInfoForSlot(unsigned argIndex) const
Retrieve the identifier at a given position in the selector.
bool isParameterPack() const
Returns whether this is a parameter pack.
FunctionDecl * getTemplatedDecl() const
Get the underlying function declaration of the template.
Sugar for parentheses used when specifying types.
QualType getAdjustedType() const
QualType getReturnType() const
bool isPure() const
Whether this virtual function is pure, i.e.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of enums...
Represents typeof(type), a GCC extension.
Interfaces are the core concept in Objective-C for object oriented design.
void AddType(const Type *T)
TemplateArgument getArgumentPack() const
void AddIdentifierInfo(const IdentifierInfo *II)
QualType getElementType() const
Expr * getInClassInitializer() const
Get the C++11 default member initializer for this member, or null if one has not been set...
Represents a static or instance method of a struct/union/class.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
bool isParameterPack() const
unsigned pack_size() const
The number of template arguments in the given template argument pack.
const TemplateTypeParmType * getReplacedParameter() const
Gets the template parameter that was substituted for.
QualType getEquivalentType() const
bool isScoped() const
Returns true if this is a C++11 scoped enumeration.
QualType getInnerType() const
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
NestedNameSpecifier * getQualifier() const
Retrieve the qualification on this type.
unsigned getODRHash()
Returns ODRHash of the function.
AutoTypeKeyword getKeyword() const
Qualifiers getIndexTypeQualifiers() const
TypeClass getTypeClass() const
void AddNestedNameSpecifier(const NestedNameSpecifier *NNS)
ArrayRef< TemplateArgument > template_arguments() const
bool isExplicitlyDefaulted() const
Whether this function is explicitly defaulted per C++0x.
Represents a C++11 static_assert declaration.
void AddSubDecl(const Decl *D)
void AddEnumDecl(const EnumDecl *Enum)
Represents a pointer type decayed from an array or function type.
The injected class name of a C++ class template or class template partial specialization.
QualType getPointeeType() const
Represents a pack expansion of types.
ArrayRef< TemplateArgument > pack_elements() const
Iterator range referencing all of the elements of a template argument pack.
StringRef getName() const
Return the actual identifier string.
Base class for declarations which introduce a typedef-name.
Represents a template argument.
Represents a type which was implicitly adjusted by the semantic engine for arbitrary reasons...
Dataflow Directional Tag Classes.
ExtInfo getExtInfo() const
const TemplateArgument & getArgument() const
bool isLateTemplateParsed() const
Whether this templated function will be late parsed.
NestedNameSpecifier * getQualifier() const
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
The base class of all kinds of template declarations (e.g., class, function, etc.).
The template argument is a pack expansion of a template name that was provided for a template templat...
QualType getUnderlyingType() const
AccessSpecifier getAccess() const
const Expr * getInit() const
bool hasLocalQualifiers() const
Determine whether this particular QualType instance has any qualifiers, without looking through any t...
QualType getUnderlyingType() const
void AddCXXRecordDecl(const CXXRecordDecl *Record)
The name of a declaration.
VectorKind getVectorKind() const
bool isKeywordSelector() const
bool isKindOfType() const
Whether this ia a "__kindof" type (semantically).
A pointer to member type per C++ 8.3.3 - Pointers to members.
Expr * getDefaultArgument() const
Retrieve the default argument, if any.
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template...
A type that was preceded by the 'template' keyword, stored as a Type*.
const TemplateTypeParmType * getReplacedParameter() const
Gets the template parameter that was substituted for.
QualType getModifiedType() const
Represents a pointer to an Objective C object.
bool isSugared() const
Returns whether this type directly provides sugar.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
Complex values, per C99 6.2.5p11.
unsigned getNumArgs() const
Retrieve the number of template arguments.
const llvm::APInt & getSize() const
bool isStaticLocal() const
Returns true if a variable with function scope is a static local variable.
ExtVectorType - Extended vector type.
Base for LValueReferenceType and RValueReferenceType.
The template argument is a type.
QualType getUnderlyingType() const
The template argument is actually a parameter pack.
const TemplateArgumentLoc & getDefaultArgument() const
Retrieve the default argument, if any.
A template argument list.
ClassTemplateDecl * getDescribedClassTemplate() const
Retrieves the class template that is described by this class declaration.
TypedefNameDecl * getDecl() const
ArgKind getKind() const
Return the kind of stored template argument.
unsigned getDepth() const
An attributed type is a type to which a type attribute has been applied.
TemplateDecl * getCXXDeductionGuideTemplate() const
If this name is the name of a C++ deduction guide, return the template associated with that name...
Represents a type parameter type in Objective C.
bool isMutable() const
Determines whether this field is mutable (C++ only).
Represents a C++ struct/union/class.
Represents a template specialization type whose template cannot be resolved, e.g. ...
ArrayRef< TemplateArgument > template_arguments() const
The template argument is a template name that was provided for a template template parameter...
Represents a C array with an unspecified size.
QualType getNamedType() const
Retrieve the type named by the qualified-id.
bool isNull() const
Determine whether this is the empty selector.
QualType getReplacementType() const
Gets the type that was substituted for the template parameter.
Declaration of a class template.
This class is used for builtin types like 'int'.
QualType getIntegerType() const
Return the integer type this enum decl corresponds to.
void AddStmt(const Stmt *S)
unsigned getNumElements() const
QualType getAsType() const
Retrieve the type for a type template argument.
Represents an extended address space qualifier where the input address space value is dependent...
Represents a type template specialization; the template must be a class template, a type alias templa...
bool isDeleted() const
Whether this function has been deleted.
static bool isWhitelistedDecl(const Decl *D, const DeclContext *Parent)
QualType getDefaultArgument() const
Retrieve the default argument, if any.
IdentifierInfo * getCXXLiteralIdentifier() const
If this name is the name of a literal operator, retrieve the identifier associated with it...
A set of overloaded template declarations.
This represents a decl that may have a name.
Represents a C array with a specified size that is not an integer-constant-expression.
A simple visitor class that helps create declaration visitors.
The global specifier '::'. There is no stored value.
TemplateName getAsTemplateOrTemplatePattern() const
Retrieve the template argument as a template name; if the argument is a pack expansion, return the pattern as a template name.
Represents the canonical version of C arrays with a specified constant size.
Declaration of a template function.
bool isDeletedAsWritten() const
QualType getPointeeType() const
QualType getType() const
Return the type wrapped by this type source info.
A single template declaration.
const IdentifierInfo * getIdentifier() const
Expr * getSizeExpr() const
QualType getPointeeType() const
Gets the type pointed to by this ObjC pointer.