15#ifndef LLVM_CLANG_AST_ASTNODETRAVERSER_H 
   16#define LLVM_CLANG_AST_ASTNODETRAVERSER_H 
   28#include "llvm/Support/SaveAndRestore.h" 
   64template <
typename Derived, 
typename NodeDelegateType>
 
   69                                           const comments::FullComment *>,
 
   77  bool Deserialize = 
false;
 
   85  bool VisitLocs = 
false;
 
   89  NodeDelegateType &getNodeDelegate() {
 
   90    return getDerived().doGetNodeDelegate();
 
   92  Derived &getDerived() { 
return *
static_cast<Derived *
>(
this); }
 
  105    getNodeDelegate().AddChild([=] {
 
  106      getNodeDelegate().Visit(D);
 
  115      for (
const auto &A : D->
attrs())
 
  120        Visit(Comment, Comment);
 
  125          if (
const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
 
  126            auto SK = CTSD->getSpecializationKind();
 
  132        if (
const auto *DC = dyn_cast<DeclContext>(D))
 
 
  139    getNodeDelegate().AddChild(Label, [=] {
 
  140      const Stmt *S = Node;
 
  142      if (
auto *E = dyn_cast_or_null<Expr>(S)) {
 
  147          S = E->IgnoreUnlessSpelledInSource();
 
  152      getNodeDelegate().Visit(S);
 
  162              OpenACCWaitConstruct, SYCLKernelCallStmt>(S))
 
  167              CXXRewrittenBinaryOperator>(S))
 
  170      for (
const Stmt *SubStmt : S->
children())
 
 
  180    getNodeDelegate().AddChild([=] {
 
  181      getNodeDelegate().Visit(
T);
 
 
  187    getNodeDelegate().AddChild([=] {
 
  188      getNodeDelegate().Visit(
T);
 
  194          T->getLocallyUnqualifiedSingleStepDesugaredType();
 
  196        Visit(SingleStepDesugar);
 
 
  201    getNodeDelegate().AddChild([=] {
 
  202      getNodeDelegate().Visit(
T);
 
  206      if (
auto Inner = 
T.getNextTypeLoc())
 
 
  212    getNodeDelegate().AddChild([=] {
 
  213      getNodeDelegate().Visit(A);
 
 
  221    getNodeDelegate().AddChild([=] {
 
  222      getNodeDelegate().Visit(
Init);
 
 
  228             const Decl *From = 
nullptr, 
const char *Label = 
nullptr) {
 
  229    getNodeDelegate().AddChild([=] {
 
  230      getNodeDelegate().Visit(A, R, From, Label);
 
 
  236    getNodeDelegate().AddChild([=] {
 
  237      getNodeDelegate().Visit(
C);
 
 
  244    getNodeDelegate().AddChild([=] {
 
  245      getNodeDelegate().Visit(
C);
 
  246      for (
const auto *S : 
C->children())
 
 
  252    getNodeDelegate().AddChild([=] {
 
  253      getNodeDelegate().Visit(
C);
 
  254      for (
const auto *S : 
C->children())
 
 
  260    getNodeDelegate().AddChild([=] {
 
  261      getNodeDelegate().Visit(A);
 
  263        Visit(TSI->getType());
 
  264      Visit(A.getAssociationExpr());
 
 
  269    getNodeDelegate().AddChild([=] {
 
  270      getNodeDelegate().Visit(R);
 
  273      if (
auto *TR = dyn_cast<concepts::TypeRequirement>(R)) {
 
  274        if (!TR->isSubstitutionFailure())
 
  275          Visit(TR->getType()->getType().getTypePtr());
 
  276      } 
else if (
auto *ER = dyn_cast<concepts::ExprRequirement>(R)) {
 
  277        if (!ER->isExprSubstitutionFailure())
 
  278          Visit(ER->getExpr());
 
  279        if (!ER->getReturnTypeRequirement().isEmpty())
 
  280          Visit(ER->getReturnTypeRequirement()
 
  282                    ->getImmediatelyDeclaredConstraint());
 
  283      } 
else if (
auto *NR = dyn_cast<concepts::NestedRequirement>(R)) {
 
  284        if (!NR->hasInvalidConstraint())
 
  285          Visit(NR->getConstraintExpr());
 
 
  291    getNodeDelegate().AddChild([=] { getNodeDelegate().Visit(R); });
 
 
  295    getNodeDelegate().AddChild([=] { getNodeDelegate().Visit(
Value, Ty); });
 
 
  299    getNodeDelegate().AddChild([=] {
 
  300      getNodeDelegate().Visit(
C, FC);
 
 
  316    if (
const auto *D = N.
get<
Decl>())
 
  318    else if (
const auto *S = N.
get<
Stmt>())
 
  322    else if (
const auto *
T = N.
get<
Type>())
 
 
  348    for (
const auto &TP : *TPL)
 
 
  365                               const Decl *From = 
nullptr,
 
  366                               const char *Label = 
nullptr) {
 
 
  371    for (
unsigned i = 0, e = TAL.
size(); i < e; ++i)
 
 
  379    for (
const auto &typeParam : *typeParams) {
 
 
  386    Visit(
T->getTypeSourceInfo()->getTypeLoc());
 
 
  390    Visit(
T->getPointeeType());
 
 
  393    Visit(
T->getPointeeType());
 
 
  400      Visit(Qualifier.getAsType());
 
  405    Visit(
T->getPointeeType());
 
 
  413    Visit(
T->getElementType());
 
 
  417    Visit(
T->getElementType());
 
 
  424    for (
const QualType &PT : 
T->getParamTypes())
 
 
  428    Visit(
T->getUnderlyingExpr());
 
 
  431    Visit(
T->getUnderlyingExpr());
 
 
  444    if (
T->getModifiedType() != 
T->getEquivalentType())
 
  445      Visit(
T->getModifiedType());
 
 
  448    Visit(
T->getWrappedType());
 
 
  451    QualType Contained = 
T->getContainedType();
 
 
  456    for (
auto &Operand : 
T->getOperands()) {
 
  457      using SpirvOperandKind = SpirvOperand::SpirvOperandKind;
 
  459      switch (Operand.getKind()) {
 
  460      case SpirvOperandKind::ConstantId:
 
  461      case SpirvOperandKind::Literal:
 
  464      case SpirvOperandKind::TypeId:
 
  465        Visit(Operand.getResultType());
 
  469        llvm_unreachable(
"Invalid SpirvOperand kind!");
 
 
  476    Visit(
T->getArgumentPack());
 
 
  479    for (
const auto &Arg : 
T->template_arguments())
 
 
  483    Visit(
T->getPointeeType());
 
 
  493    for (
const auto &Arg : 
T->getTypeConstraintArguments())
 
 
  508      if (
auto *Args = CR->getTemplateArgsAsWritten())
 
  509        for (
const auto &Arg : Args->arguments())
 
 
  530    Visit(TL.getUnderlyingExpr());
 
 
  533    for (
unsigned I=0, N=TL.
getNumArgs(); I < N; ++I)
 
 
  557      Visit(TRC.ConstraintExpr);
 
  562    if (
const auto *
C = dyn_cast<CXXConstructorDecl>(D))
 
  563      for (
const auto *I : 
C->inits())
 
 
  582      Visit(TSI->getTypeLoc());
 
 
  619    for (
const auto *E : D->
varlist())
 
 
  624    for (
const auto *E : D->
varlist())
 
 
  644    for (
const auto *E : D->
varlist())
 
 
  650  template <
typename SpecializationDecl>
 
  652    for (
const auto *Redecl : D->redecls())
 
 
  656  template <
typename TemplateDecl>
 
  663      for (
const auto *Child : D->specializations())
 
 
  721      Visit(TC->getImmediatelyDeclaredConstraint());
 
 
  772        if (TT->isTagOwned())
 
  773          Visit(TT->getDecl());
 
 
  799    for (
const auto &I : D->
inits())
 
 
  813    for (
const auto &D : Node->
decls())
 
 
  818    for (
const auto *A : Node->
getAttrs())
 
 
  844    for (
const auto *
C : Node->clauses())
 
 
  849    for (
const auto *
C : Node->
clauses())
 
 
  859    for (
const auto *
C : Node->clauses())
 
 
  865      Visit(Filler, 
"array_filler");
 
 
  871      Visit(Filler, 
"array_filler");
 
 
  897        Visit(Arg.getArgument());
 
 
  915      for (
unsigned I = 0, N = Node->
capture_size(); I != N; ++I) {
 
  917        if (!
C->isExplicit())
 
  920          Visit(
C->getCapturedVar());
 
 
  963    for (
const auto *Child :
 
  964         make_filter_range(Node->
children(), [
this](
const Stmt *Child) {
 
  965           if (Traversal != TK_IgnoreUnlessSpelledInSource)
 
  967           return !isa<CXXDefaultArgExpr>(Child);
 
 
 1004#include "clang/AST/AttrNodeTraverse.inc" 
 
C Language Family Type Representation.
 
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
 
comments::FullComment * getLocalCommentForDeclUncached(const Decl *D) const
Return parsed documentation comment attached to a given declaration.
 
ASTNodeTraverser traverses the Clang AST for dumping purposes.
 
void VisitSubstNonTypeTemplateParmPackExpr(const SubstNonTypeTemplateParmPackExpr *E)
 
void VisitDeclStmt(const DeclStmt *Node)
 
void VisitFunctionType(const FunctionType *T)
 
void VisitCapturedDecl(const CapturedDecl *D)
 
void VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *Node)
 
void Visit(const BlockDecl::Capture &C)
 
void VisitAdjustedType(const AdjustedType *T)
 
void VisitDependentSizedExtVectorTypeLoc(DependentSizedExtVectorTypeLoc TL)
 
void VisitSizeOfPackExpr(const SizeOfPackExpr *Node)
 
void VisitMemberPointerType(const MemberPointerType *T)
 
void VisitDependentSizedArrayType(const DependentSizedArrayType *T)
 
void VisitTypeOfExprType(const TypeOfExprType *T)
 
void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *E)
 
void VisitOpenACCWaitConstruct(const OpenACCWaitConstruct *Node)
 
void VisitLocInfoType(const LocInfoType *T)
 
void dumpTemplateDeclSpecialization(const SpecializationDecl *D)
 
void VisitOpenACCConstructStmt(const OpenACCConstructStmt *Node)
 
void VisitHLSLInlineSpirvType(const HLSLInlineSpirvType *T)
 
void Visit(const comments::Comment *C, const comments::FullComment *FC)
 
void VisitDependentSizedArrayTypeLoc(DependentSizedArrayTypeLoc TL)
 
void VisitClassTemplateSpecializationDecl(const ClassTemplateSpecializationDecl *D)
 
void VisitBlockDecl(const BlockDecl *D)
 
void VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL)
 
void VisitObjCImplementationDecl(const ObjCImplementationDecl *D)
 
void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D)
 
void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node)
 
void VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc TL)
 
void VisitPackIndexingType(const PackIndexingType *T)
 
void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D)
 
void VisitCXXParenListInitExpr(const CXXParenListInitExpr *PLIE)
 
void dumpTemplateArgumentList(const TemplateArgumentList &TAL)
 
void Visit(const OMPClause *C)
 
void VisitImplicitConceptSpecializationDecl(const ImplicitConceptSpecializationDecl *CSD)
 
void VisitReferenceType(const ReferenceType *T)
 
void VisitBlockExpr(const BlockExpr *Node)
 
void VisitDecltypeType(DecltypeType TL)
 
void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D)
 
void VisitStaticAssertDecl(const StaticAssertDecl *D)
 
void VisitBlockPointerType(const BlockPointerType *T)
 
void VisitFieldDecl(const FieldDecl *D)
 
void VisitAttributedStmt(const AttributedStmt *Node)
 
void Visit(const Type *T)
 
void VisitPipeType(const PipeType *T)
 
void Visit(const Attr *A)
 
void VisitInitListExpr(const InitListExpr *ILE)
 
void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *Node)
 
void VisitVarTemplateDecl(const VarTemplateDecl *D)
 
void VisitPackExpansionType(const PackExpansionType *T)
 
void VisitBTFTagAttributedType(const BTFTagAttributedType *T)
 
void VisitTypeAliasDecl(const TypeAliasDecl *D)
 
void VisitDecompositionDecl(const DecompositionDecl *D)
 
void VisitObjCMethodDecl(const ObjCMethodDecl *D)
 
void VisitClassTemplateDecl(const ClassTemplateDecl *D)
 
void Visit(const Decl *D, bool VisitLocs=false)
 
void SetTraversalKind(TraversalKind TK)
 
void Visit(const concepts::Requirement *R)
 
void VisitLabelStmt(const LabelStmt *Node)
 
void VisitTypeTraitExpr(const TypeTraitExpr *E)
 
void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D)
 
void VisitComplexType(const ComplexType *T)
 
void dumpDeclContext(const DeclContext *DC)
 
void VisitUsingShadowDecl(const UsingShadowDecl *D)
 
void dumpObjCTypeParamList(const ObjCTypeParamList *typeParams)
 
void VisitVarTemplateSpecializationDecl(const VarTemplateSpecializationDecl *D)
 
void Visit(const DynTypedNode &N)
 
void VisitExpressionTemplateArgument(const TemplateArgument &TA)
 
void VisitOMPGroupPrivateDecl(const OMPGroupPrivateDecl *D)
 
void dumpTemplateDecl(const TemplateDecl *D)
 
void VisitHLSLAttributedResourceType(const HLSLAttributedResourceType *T)
 
void VisitVectorType(const VectorType *T)
 
void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A, const Decl *From=nullptr, const char *Label=nullptr)
 
void Visit(const OpenACCClause *C)
 
bool getDeserialize() const
 
void VisitCXXCatchStmt(const CXXCatchStmt *Node)
 
void VisitClassTemplatePartialSpecializationDecl(const ClassTemplatePartialSpecializationDecl *D)
 
void VisitTypedefDecl(const TypedefDecl *D)
 
void Visit(const ConceptReference *R)
 
void VisitBindingDecl(const BindingDecl *D)
 
void Visit(const APValue &Value, QualType Ty)
 
void VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL)
 
void VisitRequiresExpr(const RequiresExpr *E)
 
void VisitGenericSelectionExpr(const GenericSelectionExpr *E)
 
void VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T)
 
void VisitOpaqueValueExpr(const OpaqueValueExpr *Node)
 
void setDeserialize(bool D)
 
void VisitArrayType(const ArrayType *T)
 
void Visit(const CXXCtorInitializer *Init)
 
void VisitVarDecl(const VarDecl *D)
 
void VisitVarTemplatePartialSpecializationDecl(const VarTemplatePartialSpecializationDecl *D)
 
void VisitFileScopeAsmDecl(const FileScopeAsmDecl *D)
 
void VisitAutoType(const AutoType *T)
 
void VisitFunctionProtoType(const FunctionProtoType *T)
 
void VisitUnaryTransformType(const UnaryTransformType *T)
 
void VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL)
 
void VisitLambdaExpr(const LambdaExpr *Node)
 
void VisitCallExpr(const CallExpr *Node)
 
void VisitDecltypeType(const DecltypeType *T)
 
void VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL)
 
void VisitOMPExecutableDirective(const OMPExecutableDirective *Node)
 
void VisitEnumConstantDecl(const EnumConstantDecl *D)
 
void VisitTemplateSpecializationType(const TemplateSpecializationType *T)
 
void VisitAtomicType(const AtomicType *T)
 
void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T)
 
void Visit(const Stmt *Node, StringRef Label={})
 
void VisitOutlinedFunctionDecl(const OutlinedFunctionDecl *D)
 
void Visit(const GenericSelectionExpr::ConstAssociation &A)
 
void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D)
 
void VisitConceptDecl(const ConceptDecl *D)
 
void VisitTopLevelStmtDecl(const TopLevelStmtDecl *D)
 
void dumpASTTemplateArgumentListInfo(const ASTTemplateArgumentListInfo *TALI)
 
void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *CSE)
 
void VisitVariableArrayType(const VariableArrayType *T)
 
void VisitTypeTemplateArgument(const TemplateArgument &TA)
 
void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D)
 
void VisitOMPAllocateDecl(const OMPAllocateDecl *D)
 
void VisitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D)
 
void VisitCapturedStmt(const CapturedStmt *Node)
 
void VisitFriendDecl(const FriendDecl *D)
 
void VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E)
 
void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D)
 
void VisitCXXForRangeStmt(const CXXForRangeStmt *Node)
 
void VisitOMPDeclareMapperDecl(const OMPDeclareMapperDecl *D)
 
void VisitObjCObjectPointerType(const ObjCObjectPointerType *T)
 
void VisitAttributedType(const AttributedType *T)
 
void Visit(const TemplateArgument &A, SourceRange R={}, const Decl *From=nullptr, const char *Label=nullptr)
 
void VisitPackTemplateArgument(const TemplateArgument &TA)
 
TraversalKind GetTraversalKind() const
 
void VisitObjCCategoryDecl(const ObjCCategoryDecl *D)
 
void VisitAutoTypeLoc(AutoTypeLoc TL)
 
void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *)
 
void VisitCXXRewrittenBinaryOperator(const CXXRewrittenBinaryOperator *Node)
 
void VisitSYCLKernelCallStmt(const SYCLKernelCallStmt *Node)
 
void dumpTemplateParameters(const TemplateParameterList *TPL)
 
void VisitFunctionDecl(const FunctionDecl *D)
 
void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D)
 
void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D)
 
void VisitPointerType(const PointerType *T)
 
Represents a type which was implicitly adjusted by the semantic engine for arbitrary reasons.
 
Expr * getSizeExpr() const
 
Represents an array type, per C99 6.7.5.2 - Array Declarators.
 
Attr - This represents one attribute.
 
Represents an attribute applied to a statement.
 
ArrayRef< const Attr * > getAttrs() const
 
ConceptReference * getConceptReference() const
 
A binding in a decomposition declaration.
 
VarDecl * getHoldingVar() const
Get the variable (if any) that holds the value of evaluating the binding.
 
Expr * getBinding() const
Get the expression to which this declaration is bound.
 
A class which contains all the information about a particular captured value.
 
Represents a block literal declaration, which is like an unnamed FunctionDecl.
 
Stmt * getBody() const override
getBody - If this Decl represents a declaration for a body of code, such as a function or method defi...
 
ArrayRef< Capture > captures() const
 
ArrayRef< ParmVarDecl * > parameters() const
 
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
 
const BlockDecl * getBlockDecl() const
 
Represents the builtin template declaration which is used to implement __make_integer_seq and other b...
 
CXXCatchStmt - This represents a C++ catch block.
 
VarDecl * getExceptionDecl() const
 
Represents a C++ base or member initializer.
 
A default argument (C++ [dcl.fct.default]).
 
A use of a default initializer in a constructor or in aggregate initialization.
 
Expr * getExpr()
Get the initialization expression that will be used.
 
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
 
VarDecl * getLoopVariable()
 
Represents a list-initialization with parenthesis.
 
A rewritten comparison expression that was originally written using operator syntax.
 
const Expr * getLHS() const
 
const Expr * getRHS() const
 
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
 
Represents the body of a CapturedStmt, and serves as its DeclContext.
 
Stmt * getBody() const override
getBody - If this Decl represents a declaration for a body of code, such as a function or method defi...
 
This captures a statement into a function.
 
CapturedDecl * getCapturedDecl()
Retrieve the outlined function declaration.
 
Declaration of a class template.
 
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
 
Represents a class template specialization, which refers to a class template with a given set of temp...
 
const TemplateArgumentList & getTemplateArgs() const
Retrieve the template arguments of the class template specialization.
 
Complex values, per C99 6.2.5p11.
 
Declaration of a C++20 concept.
 
Expr * getConstraintExpr() const
 
A reference to a concept and its template args, as it appears in the code.
 
Represents the specialization of a concept - evaluates to a prvalue of type bool.
 
const ASTTemplateArgumentListInfo * getTemplateArgsAsWritten() const
 
bool hasExplicitTemplateArgs() const
 
const ImplicitConceptSpecializationDecl * getSpecializationDecl() const
 
A simple visitor class that helps create attribute visitors.
 
A simple visitor class that helps create declaration visitors.
 
ConstStmtVisitor - This class implements a simple visitor for Stmt subclasses.
 
A simple visitor class that helps create template argument visitors.
 
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
 
decl_range noload_decls() const
noload_decls_begin/end - Iterate over the declarations stored in this context that are currently load...
 
decl_range decls() const
decls_begin/decls_end - Iterate over the declarations stored in this context.
 
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
 
Decl - This represents one declaration (or definition), e.g.
 
ASTContext & getASTContext() const LLVM_READONLY
 
bool isImplicit() const
isImplicit - Indicates whether the declaration was implicitly generated by the implementation.
 
const AssociatedConstraint & getTrailingRequiresClause() const
Get the constraint-expression introduced by the trailing requires-clause in the function/member decla...
 
TypeSourceInfo * getTypeSourceInfo() const
 
A decomposition declaration.
 
ArrayRef< BindingDecl * > bindings() const
 
const ParmDecl * getInheritedFrom() const
Get the parameter from which we inherit the default argument, if any.
 
Provides information about a dependent function-template specialization declaration.
 
Represents an array type in C++ whose size is a value-dependent expression.
 
Represents an extended vector type where either the type or size is dependent.
 
A dynamically typed AST node container.
 
const T * get() const
Retrieve the stored node as type T.
 
An instance of this object exists for each enum constant that is defined.
 
const Expr * getInitExpr() const
 
This represents one expression.
 
Represents a member of a struct/union/class.
 
Expr * getInClassInitializer() const
Get the C++11 default member initializer for this member, or null if one has not been set.
 
bool isBitField() const
Determines whether this field is a bitfield.
 
Expr * getBitWidth() const
Returns the expression that represents the bit width, if this field is a bit field.
 
const Expr * getAsmStringExpr() const
 
FriendDecl - Represents the declaration of a friend entity, which can be a function,...
 
NamedDecl * getFriendDecl() const
If this friend declaration doesn't name a type, return the inner declaration.
 
TypeSourceInfo * getFriendType() const
If this friend declaration names an (untemplated but possibly dependent) type, return the type; other...
 
Represents a function declaration or definition.
 
Stmt * getBody(const FunctionDecl *&Definition) const
Retrieve the body (definition) of the function.
 
ArrayRef< ParmVarDecl * > parameters() const
 
FunctionTemplateSpecializationInfo * getTemplateSpecializationInfo() const
If this function is actually a function template specialization, retrieve information about this func...
 
param_iterator param_begin()
 
bool doesThisDeclarationHaveABody() const
Returns whether this specific declaration of the function has a body.
 
DependentFunctionTemplateSpecializationInfo * getDependentSpecializationInfo() const
 
bool isDefaulted() const
Whether this function is defaulted.
 
Represents a prototype with parameter type info, e.g.
 
Declaration of a template function.
 
Provides information about a function template specialization, which is a FunctionDecl that has been ...
 
ArrayRef< ParmVarDecl * > getParams() const
 
FunctionType - C99 6.7.5.3 - Function Declarators.
 
Represents a C11 generic selection.
 
TypeSourceInfo * getControllingType()
Return the controlling type of this generic selection expression.
 
bool isExprPredicate() const
Whether this generic selection uses an expression as its controlling argument.
 
association_range associations()
 
AssociationTy< true > ConstAssociation
 
Expr * getControllingExpr()
Return the controlling expression of this generic selection expression.
 
ArrayRef< TemplateArgument > getTemplateArguments() const
 
Describes an C or C++ initializer list.
 
Expr * getArrayFiller()
If this initializer list initializes an array with more elements than there are initializers in the l...
 
LabelStmt - Represents a label, which has a substatement.
 
LabelDecl * getDecl() const
 
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
 
capture_iterator capture_begin() const
Retrieve an iterator pointing to the first lambda capture.
 
Stmt * getBody() const
Retrieve the body of the lambda.
 
unsigned capture_size() const
Determine the number of captures in this lambda.
 
bool isInitCapture(const LambdaCapture *Capture) const
Determine whether one of this lambda's captures is an init-capture.
 
CXXMethodDecl * getCallOperator() const
Retrieve the function call operator associated with this lambda expression.
 
TemplateParameterList * getTemplateParameterList() const
If this is a generic lambda expression, retrieve the template parameter list associated with it,...
 
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument for this lambda expression (which initializes the first ca...
 
CXXRecordDecl * getLambdaClass() const
Retrieve the class that corresponds to the lambda.
 
Holds a QualType and a TypeSourceInfo* that came out of a declarator parsing.
 
Wrapper for source info for member pointers.
 
NestedNameSpecifierLoc getQualifierLoc() const
 
A pointer to member type per C++ 8.3.3 - Pointers to members.
 
TypeLoc castAsTypeLoc() const
For a nested-name-specifier that refers to a type, retrieve the type with source-location information...
 
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
 
Kind
The kind of specifier that completes this nested name specifier.
 
@ Type
A type, stored as a Type*.
 
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
 
const DefArgStorage & getDefaultArgStorage() const
 
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
 
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template.
 
const TemplateArgumentLoc & getDefaultArgument() const
Retrieve the default argument, if any.
 
Expr * getPlaceholderTypeConstraint() const
Return the constraint introduced by the placeholder type of this non-type template parameter (if any)...
 
This represents 'pragma omp allocate ...' directive.
 
clauselist_range clauselists()
 
Pseudo declaration for capturing expressions.
 
This is a basic class for representing single OpenMP clause.
 
This represents 'pragma omp declare mapper ...' directive.
 
clauselist_range clauselists()
 
This represents 'pragma omp declare reduction ...' directive.
 
Expr * getInitializer()
Get initializer expression (if specified) of the declare reduction construct.
 
Expr * getCombiner()
Get combiner expression of the declare reduction construct.
 
This represents 'pragma omp groupprivate ...' directive.
 
This represents 'pragma omp threadprivate ...' directive.
 
Represents Objective-C's @catch statement.
 
const VarDecl * getCatchParamDecl() const
 
ObjCCategoryDecl - Represents a category declaration.
 
ObjCTypeParamList * getTypeParamList() const
Retrieve the type parameter list associated with this category or extension.
 
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
 
Represents an ObjC class declaration.
 
ObjCTypeParamList * getTypeParamListAsWritten() const
Retrieve the type parameters written on this particular declaration of the class.
 
ObjCMethodDecl - Represents an instance or class method declaration.
 
bool hasBody() const override
Determine whether this method has a body.
 
ArrayRef< ParmVarDecl * > parameters() const
 
Stmt * getBody() const override
Retrieve the body of this method, if it has one.
 
bool isThisDeclarationADefinition() const
Returns whether this specific method is a definition.
 
Represents a pointer to an Objective C object.
 
Stores a list of Objective-C type parameters for a parameterized class or a category/extension thereo...
 
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.
 
Expr * getSourceExpr() const
The source expression of an opaque value expression is the expression which originally generated the ...
 
This is the base type for all OpenACC Clauses.
 
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
 
ArrayRef< const OpenACCClause * > clauses() const
 
Represents a partial function definition.
 
parameter_const_range parameters() const
 
Stmt * getBody() const override
getBody - If this Decl represents a declaration for a body of code, such as a function or method defi...
 
bool hasExplicitTemplateArgs() const
Determines whether this expression had explicit template arguments.
 
ArrayRef< TemplateArgumentLoc > template_arguments() const
 
Represents a parameter to a function.
 
PointerType - C99 6.7.5.1 - Pointer Declarators.
 
A (possibly-)qualified type.
 
bool isNull() const
Return true if this QualType doesn't point to a type yet.
 
bool hasQualifiers() const
Return true if the set contains any qualifiers.
 
Base for LValueReferenceType and RValueReferenceType.
 
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
 
ArrayRef< concepts::Requirement * > getRequirements() const
 
ArrayRef< ParmVarDecl * > getLocalParameters() const
 
SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...
 
CompoundStmt * getOriginalStmt()
Retrieve the model statement.
 
OutlinedFunctionDecl * getOutlinedFunctionDecl()
Retrieve the outlined function declaration.
 
Represents an expression that computes the length of a parameter pack.
 
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof... expression, such as is produced f...
 
ArrayRef< TemplateArgument > getPartialArguments() const
Get.
 
A trivial tuple used to represent a source range.
 
Represents a C++11 static_assert declaration.
 
void Visit(PTR(Stmt) S, ParamTys... P)
 
Stmt - This represents one statement.
 
Represents a reference to a non-type template parameter that has been substituted with a template arg...
 
NonTypeTemplateParmDecl * getParameter() const
 
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
 
TemplateArgument getArgumentPack() const
Retrieve the template argument pack containing the substituted template arguments.
 
NonTypeTemplateParmDecl * getParameterPack() const
Retrieve the non-type template parameter pack being substituted.
 
A template argument list.
 
unsigned size() const
Retrieve the number of template arguments in this template argument list.
 
Location wrapper for a TemplateArgument.
 
const TemplateArgument & getArgument() const
 
SourceRange getSourceRange() const LLVM_READONLY
 
Represents a template argument.
 
Expr * getAsExpr() const
Retrieve the template argument as an expression.
 
QualType getAsType() const
Retrieve the type for a type template argument.
 
ArrayRef< TemplateArgument > pack_elements() const
Iterator range referencing all of the elements of a template argument pack.
 
The base class of all kinds of template declarations (e.g., class, function, etc.).
 
NamedDecl * getTemplatedDecl() const
Get the underlying, templated declaration.
 
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
 
Stores a list of template parameters for a TemplateDecl and its derived classes.
 
Expr * getRequiresClause()
The constraint-expression of the associated requires-clause.
 
unsigned getNumArgs() const
 
TemplateArgumentLoc getArgLoc(unsigned i) const
 
TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.
 
const DefArgStorage & getDefaultArgStorage() const
 
const TemplateArgumentLoc & 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.
 
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
 
Declaration of a template type parameter.
 
const TemplateArgumentLoc & getDefaultArgument() const
Retrieve the default argument, if any.
 
const TypeConstraint * getTypeConstraint() const
Returns the type constraint associated with this template parameter (if any).
 
bool hasDefaultArgument() const
Determine whether this template parameter has a default argument.
 
bool defaultArgumentWasInherited() const
Determines whether the default argument was inherited from a previous declaration of this template.
 
const DefArgStorage & getDefaultArgStorage() const
 
A declaration that models statements at global scope.
 
Represents the declaration of a typedef-name via a C++11 alias-declaration.
 
Declaration of an alias template.
 
TypeAliasDecl * getTemplatedDecl() const
Get the underlying function declaration of the template.
 
RetTy Visit(TypeLoc TyLoc)
 
Base wrapper for a particular "section" of type source info.
 
QualType getType() const
Get the type for which this source info wrapper provides information.
 
Expr * getUnderlyingExpr() const
 
Represents a typeof (or typeof) expression (a C23 feature and GCC extension) or a typeof_unqual expre...
 
A container of type source information.
 
QualType getType() const
Return the type wrapped by this type source info.
 
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
 
ArrayRef< TypeSourceInfo * > getArgs() const
Retrieve the argument types.
 
RetTy Visit(const Type *T)
Performs the operation associated with this visitor object.
 
The base class of the type hierarchy.
 
const T * getAs() const
Member-template getAs<specific type>'.
 
Represents the declaration of a typedef-name via the 'typedef' type specifier.
 
QualType getUnderlyingType() const
 
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
 
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
 
NamedDecl * getTargetDecl() const
Gets the underlying declaration which has been brought into the local scope.
 
Represents a variable declaration or definition.
 
bool isCXXForRangeDecl() const
Determine whether this variable is the for-range-declaration in a C++0x for-range statement.
 
const Expr * getInit() const
 
Declaration of a variable template.
 
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
 
Represents a variable template specialization, which refers to a variable template with a given set o...
 
const TemplateArgumentList & getTemplateArgs() const
Retrieve the template arguments of the variable template specialization.
 
Represents a C array with a specified size that is not an integer-constant-expression.
 
Represents a GCC generic vector type.
 
A static requirement that can be used in a requires-expression to check properties of types and expre...
 
void Visit(REF(TemplateArgument) TA, ParamTys... P)
 
The JSON file list parser is used to communicate input to InstallAPI.
 
bool isa(CodeGen::Address addr)
 
TraversalKind
Defines how we descend a level in the AST when we pass through expressions.
 
@ TK_AsIs
Will traverse all child nodes.
 
@ TK_IgnoreUnlessSpelledInSource
Ignore AST nodes not written in the source.
 
@ Parameter
The parameter type of a method or function.
 
const FunctionProtoType * T
 
@ TSK_ExplicitInstantiationDefinition
This template specialization was instantiated from a template due to an explicit instantiation defini...
 
@ TSK_ExplicitInstantiationDeclaration
This template specialization was instantiated from a template due to an explicit instantiation declar...
 
U cast(CodeGen::Address addr)
 
Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".
 
ArrayRef< TemplateArgumentLoc > arguments() const
 
A std::pair-like structure for storing a qualified type split into its local qualifiers and its local...
 
const Type * Ty
The locally-unqualified type.
 
Qualifiers Quals
The local qualifiers.