44 #ifndef LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H 45 #define LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H 79 #include "llvm/ADT/ArrayRef.h" 80 #include "llvm/ADT/SmallVector.h" 81 #include "llvm/ADT/StringRef.h" 82 #include "llvm/Support/Casting.h" 83 #include "llvm/Support/Compiler.h" 84 #include "llvm/Support/ErrorHandling.h" 85 #include "llvm/Support/Regex.h" 110 template <
typename T>
112 return MyBoundNodes.getNodeAs<T>(
ID);
122 return MyBoundNodes.getMap();
129 BoundNodes(internal::BoundNodesMap &MyBoundNodes)
130 : MyBoundNodes(MyBoundNodes) {}
132 internal::BoundNodesMap MyBoundNodes;
161 inline internal::TrueMatcher
anything() {
return internal::TrueMatcher(); }
174 extern const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
186 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
198 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl>
210 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl>
220 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasTemplateDecl>
239 auto &
SourceManager = Finder->getASTContext().getSourceManager();
260 auto &
SourceManager = Finder->getASTContext().getSourceManager();
262 if (ExpansionLoc.isInvalid()) {
285 std::string, RegExp) {
286 auto &
SourceManager = Finder->getASTContext().getSourceManager();
288 if (ExpansionLoc.isInvalid()) {
298 llvm::Regex RE(RegExp);
311 extern const internal::VariadicAllOfMatcher<Decl>
decl;
321 extern const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
335 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl>
namedDecl;
346 extern const internal::VariadicDynCastAllOfMatcher<Decl, LabelDecl>
labelDecl;
357 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
369 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceAliasDecl>
381 extern const internal::VariadicDynCastAllOfMatcher<Decl, RecordDecl>
recordDecl;
390 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl>
399 extern const internal::VariadicDynCastAllOfMatcher<Decl, ClassTemplateDecl>
412 extern const internal::VariadicDynCastAllOfMatcher<
431 extern const internal::VariadicDynCastAllOfMatcher<
444 extern const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
455 extern const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
469 extern const internal::VariadicDynCastAllOfMatcher<Decl, AccessSpecDecl>
481 extern const internal::VariadicAllOfMatcher<CXXCtorInitializer>
493 extern const internal::VariadicAllOfMatcher<TemplateArgument>
templateArgument;
504 extern const internal::VariadicAllOfMatcher<TemplateName>
templateName;
514 extern const internal::VariadicDynCastAllOfMatcher<Decl,
526 extern const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTypeParmDecl>
589 return Node.isBitField();
606 return Node.isBitField() &&
607 Node.getBitWidthValue(Finder->getASTContext()) == Width;
627 return (Initializer !=
nullptr &&
628 InnerMatcher.matches(*Initializer, Finder, Builder));
634 return Node.isMain();
648 internal::Matcher<ClassTemplateDecl>, InnerMatcher) {
650 return (Decl !=
nullptr &&
651 InnerMatcher.matches(*Decl, Finder, Builder));
657 return Node.isImplicit();
682 hasAnyTemplateArgument,
686 internal::Matcher<TemplateArgument>, InnerMatcher) {
688 internal::getTemplateSpecializationArgs(
Node);
689 return matchesFirstInRange(InnerMatcher, List.begin(), List.end(), Finder,
709 template <
typename T>
711 const internal::Matcher<T> &InnerMatcher) {
712 return internal::DynTypedMatcher::constructRestrictedWrapper(
713 new internal::TraversalMatcher<T>(TK, InnerMatcher),
714 InnerMatcher.getID().first)
715 .
template unconditionalConvertTo<T>();
718 template <
typename T>
719 internal::BindableMatcher<T>
721 const internal::BindableMatcher<T> &InnerMatcher) {
722 return internal::BindableMatcher<T>(
723 internal::DynTypedMatcher::constructRestrictedWrapper(
724 new internal::TraversalMatcher<T>(TK, InnerMatcher),
725 InnerMatcher.getID().first)
726 .
template unconditionalConvertTo<T>());
729 template <
typename... T>
730 internal::TraversalWrapper<internal::VariadicOperatorMatcher<T...>>
732 const internal::VariadicOperatorMatcher<T...> &InnerMatcher) {
733 return internal::TraversalWrapper<internal::VariadicOperatorMatcher<T...>>(
737 template <
template <
typename ToArg,
typename FromArg>
class ArgumentAdapterT,
738 typename T,
typename ToTypes>
739 internal::TraversalWrapper<
740 internal::ArgumentAdaptingMatcherFuncAdaptor<ArgumentAdapterT, T, ToTypes>>
742 const internal::ArgumentAdaptingMatcherFuncAdaptor<
743 ArgumentAdapterT, T, ToTypes> &InnerMatcher) {
744 return internal::TraversalWrapper<
745 internal::ArgumentAdaptingMatcherFuncAdaptor<ArgumentAdapterT, T,
746 ToTypes>>(TK, InnerMatcher);
749 template <
template <
typename T,
typename P1>
class MatcherT,
typename P1,
750 typename ReturnTypesF>
751 internal::TraversalWrapper<
752 internal::PolymorphicMatcherWithParam1<MatcherT, P1, ReturnTypesF>>
755 const internal::PolymorphicMatcherWithParam1<MatcherT, P1, ReturnTypesF>
757 return internal::TraversalWrapper<
758 internal::PolymorphicMatcherWithParam1<MatcherT, P1, ReturnTypesF>>(
762 template <
template <
typename T,
typename P1,
typename P2>
class MatcherT,
763 typename P1,
typename P2,
typename ReturnTypesF>
764 internal::TraversalWrapper<
765 internal::PolymorphicMatcherWithParam2<MatcherT, P1, P2, ReturnTypesF>>
768 const internal::PolymorphicMatcherWithParam2<MatcherT, P1, P2, ReturnTypesF>
770 return internal::TraversalWrapper<
771 internal::PolymorphicMatcherWithParam2<MatcherT, P1, P2, ReturnTypesF>>(
798 return InnerMatcher.matches(*
Node.IgnoreImplicit(), Finder, Builder);
827 internal::Matcher<Expr>, InnerMatcher) {
828 return InnerMatcher.matches(*
Node.IgnoreImpCasts(), Finder, Builder);
849 return InnerMatcher.matches(*
Node.IgnoreParenCasts(), Finder, Builder);
874 internal::Matcher<Expr>, InnerMatcher) {
875 return InnerMatcher.matches(*
Node.IgnoreParenImpCasts(), Finder, Builder);
891 return InnerMatcher.matches(
Node.IgnoreParens(), Finder, Builder);
907 const Expr *E =
Node.IgnoreParens();
908 return InnerMatcher.matches(*E, Finder, Builder);
925 return Node.isInstantiationDependent();
976 unsigned, N, internal::Matcher<TemplateArgument>, InnerMatcher) {
978 internal::getTemplateSpecializationArgs(
Node);
979 if (List.size() <= N)
981 return InnerMatcher.matches(List[N], Finder, Builder);
994 templateArgumentCountIs,
998 return internal::getTemplateSpecializationArgs(
Node).size() == N;
1013 internal::Matcher<QualType>, InnerMatcher) {
1016 return InnerMatcher.matches(
Node.getAsType(), Finder, Builder);
1031 internal::Matcher<TemplateName>, InnerMatcher) {
1034 return InnerMatcher.matches(
Node.getAsTemplate(), Finder, Builder);
1051 internal::Matcher<Decl>, InnerMatcher) {
1053 return InnerMatcher.matches(*
Node.getAsDecl(), Finder, Builder);
1071 return InnerMatcher.matches(*
Node.getAsExpr(), Finder, Builder);
1101 internal::Matcher<QualType>, InnerMatcher) {
1104 return InnerMatcher.matches(
Node.getIntegralType(), Finder, Builder);
1122 std::string,
Value) {
1125 return Node.getAsIntegral().toString(10) ==
Value;
1138 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1148 extern const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl>
valueDecl;
1161 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConstructorDecl>
1173 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDestructorDecl>
1184 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl>
enumDecl;
1194 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumConstantDecl>
1203 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
1212 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
1223 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl>
1235 extern const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl>
varDecl;
1245 extern const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl>
fieldDecl;
1255 extern const internal::VariadicDynCastAllOfMatcher<Decl, IndirectFieldDecl>
1264 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
1273 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionTemplateDecl>
1284 extern const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl>
friendDecl;
1294 extern const internal::VariadicAllOfMatcher<Stmt>
stmt;
1304 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclStmt>
declStmt;
1317 extern const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr>
memberExpr;
1331 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedMemberExpr>
1343 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
1355 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr>
callExpr;
1385 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr>
lambdaExpr;
1394 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXMemberCallExpr>
1406 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr>
1416 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCInterfaceDecl>
1426 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCImplementationDecl>
1436 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCProtocolDecl>
1446 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryDecl>
1456 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryImplDecl>
1471 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCMethodDecl>
1484 extern const internal::VariadicDynCastAllOfMatcher<Decl, BlockDecl>
1496 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCIvarDecl>
1507 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCPropertyDecl>
1516 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtThrowStmt>
1526 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtTryStmt>
1536 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtCatchStmt>
1546 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtFinallyStmt>
1556 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
1569 extern const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
1575 internal::Matcher<Expr>, InnerMatcher) {
1576 const Expr *SyntForm =
Node.getSyntacticForm();
1577 return (SyntForm !=
nullptr &&
1578 InnerMatcher.matches(*SyntForm, Finder, Builder));
1592 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
1604 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitValueInitExpr>
1622 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenListExpr>
1635 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
1648 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl>
usingDecl;
1659 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
1676 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
1690 extern const internal::VariadicDynCastAllOfMatcher<Decl,
1709 extern const internal::VariadicDynCastAllOfMatcher<Decl,
1722 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ConstantExpr>
1732 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenExpr>
parenExpr;
1744 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstructExpr>
1755 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
1769 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
1780 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBindTemporaryExpr>
1801 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
1813 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr>
cxxNewExpr;
1823 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
1834 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ArraySubscriptExpr>
1846 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDefaultArgExpr>
1863 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXOperatorCallExpr>
1872 extern const internal::VariadicDynCastAllOfMatcher<Stmt, Expr>
expr;
1881 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
1895 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCIvarRefExpr>
1904 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BlockExpr>
blockExpr;
1912 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt>
ifStmt;
1921 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt>
forStmt;
1933 const Stmt *
const Increment =
Node.getInc();
1934 return (Increment !=
nullptr &&
1935 InnerMatcher.matches(*Increment, Finder, Builder));
1948 const Stmt *
const Init =
Node.getInit();
1949 return (Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder));
1959 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
1972 const VarDecl *
const Var =
Node.getLoopVariable();
1973 return (Var !=
nullptr && InnerMatcher.matches(*Var, Finder, Builder));
1986 const Expr *
const Init =
Node.getRangeInit();
1987 return (Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder));
1998 extern const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt>
whileStmt;
2008 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt>
doStmt;
2018 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt>
breakStmt;
2028 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
2039 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt>
returnStmt;
2050 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt>
gotoStmt;
2061 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt>
labelStmt;
2073 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AddrLabelExpr>
2084 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt>
switchStmt;
2094 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase>
switchCase;
2104 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt>
caseStmt;
2114 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
2123 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
2133 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
2143 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt>
cxxTryStmt;
2152 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
2162 extern const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt>
nullStmt;
2172 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt>
asmStmt;
2180 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
2190 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral>
2203 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral>
2210 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral>
2220 extern const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral>
2225 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImaginaryLiteral>
2231 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral>
2241 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr>
2245 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
2249 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ChooseExpr>
2253 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
2261 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AtomicExpr>
atomicExpr;
2269 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StmtExpr>
stmtExpr;
2277 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryOperator>
2286 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryOperator>
2295 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ConditionalOperator>
2304 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
2316 extern const internal::VariadicDynCastAllOfMatcher<Stmt, OpaqueValueExpr>
2332 extern const internal::VariadicDynCastAllOfMatcher<Decl, StaticAssertDecl>
2345 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXReinterpretCastExpr>
2361 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStaticCastExpr>
2376 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDynamicCastExpr>
2387 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstCastExpr>
2396 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CStyleCastExpr>
2420 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExplicitCastExpr>
2427 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitCastExpr>
2443 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr>
castExpr;
2453 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXFunctionalCastExpr>
2462 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTemporaryObjectExpr>
2471 extern const internal::VariadicDynCastAllOfMatcher<Stmt, PredefinedExpr>
2480 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DesignatedInitExpr>
2495 return Node.size() == N;
2499 extern const internal::VariadicAllOfMatcher<QualType>
qualType;
2502 extern const internal::VariadicAllOfMatcher<Type>
type;
2505 extern const internal::VariadicAllOfMatcher<TypeLoc>
typeLoc;
2526 extern const internal::VariadicOperatorMatcherFunc<
2533 extern const internal::VariadicOperatorMatcherFunc<
2540 extern const internal::VariadicOperatorMatcherFunc<
2570 extern const internal::VariadicOperatorMatcherFunc<
2583 extern const internal::VariadicDynCastAllOfMatcher<Stmt,
2596 internal::Matcher<QualType>, InnerMatcher) {
2597 const QualType ArgumentType =
Node.getTypeOfArgument();
2598 return InnerMatcher.matches(ArgumentType, Finder, Builder);
2620 const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
2629 const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
2649 inline internal::Matcher<NamedDecl>
hasName(
const std::string &Name) {
2650 return internal::Matcher<NamedDecl>(
new internal::HasNameMatcher({Name}));
2663 extern const internal::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,
2684 assert(!RegExp.empty());
2685 std::string FullNameString =
"::" +
Node.getQualifiedNameAsString();
2686 llvm::Regex RE(RegExp);
2687 return RE.match(FullNameString);
2709 inline internal::PolymorphicMatcherWithParam1<
2710 internal::HasOverloadedOperatorNameMatcher, StringRef,
2713 return internal::PolymorphicMatcherWithParam1<
2714 internal::HasOverloadedOperatorNameMatcher, StringRef,
2751 internal::Matcher<NamedDecl>,
Base) {
2753 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2754 return Finder->classIsDerivedFrom(RD,
Base, Builder,
false);
2757 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2758 return Finder->objcClassIsDerivedFrom(InterfaceDecl,
Base, Builder,
2766 std::string, BaseName, 1) {
2767 if (BaseName.empty())
2770 const auto M = isDerivedFrom(
hasName(BaseName));
2772 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2773 return Matcher<CXXRecordDecl>(M).
matches(*RD, Finder, Builder);
2775 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2776 return Matcher<ObjCInterfaceDecl>(M).
matches(*InterfaceDecl, Finder, Builder);
2782 isSameOrDerivedFrom,
2784 internal::Matcher<NamedDecl>,
Base, 0) {
2787 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2788 return Matcher<CXXRecordDecl>(M).
matches(*RD, Finder, Builder);
2790 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2791 return Matcher<ObjCInterfaceDecl>(M).
matches(*InterfaceDecl, Finder, Builder);
2797 isSameOrDerivedFrom,
2799 std::string, BaseName, 1) {
2800 if (BaseName.empty())
2803 const auto M = isSameOrDerivedFrom(
hasName(BaseName));
2805 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2806 return Matcher<CXXRecordDecl>(M).
matches(*RD, Finder, Builder);
2808 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2809 return Matcher<ObjCInterfaceDecl>(M).
matches(*InterfaceDecl, Finder, Builder);
2834 isDirectlyDerivedFrom,
2836 internal::Matcher<NamedDecl>,
Base, 0) {
2838 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2839 return Finder->classIsDerivedFrom(RD,
Base, Builder,
true);
2842 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2843 return Finder->objcClassIsDerivedFrom(InterfaceDecl,
Base, Builder,
2849 isDirectlyDerivedFrom,
2851 std::string, BaseName, 1) {
2852 if (BaseName.empty())
2854 const auto M = isDirectlyDerivedFrom(
hasName(BaseName));
2856 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
2857 return Matcher<CXXRecordDecl>(M).
matches(*RD, Finder, Builder);
2859 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
2860 return Matcher<ObjCInterfaceDecl>(M).
matches(*InterfaceDecl, Finder, Builder);
2875 return matchesFirstInPointerRange(InnerMatcher,
Node.method_begin(),
2876 Node.method_end(), Finder, Builder);
2889 return Node.isLambda();
2910 extern const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
has;
2926 extern const internal::ArgumentAdaptingMatcherFunc<
2927 internal::HasDescendantMatcher>
2948 extern const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
2978 extern const internal::ArgumentAdaptingMatcherFunc<
2979 internal::ForEachDescendantMatcher>
2998 template <
typename T>
2999 internal::Matcher<T>
findAll(
const internal::Matcher<T> &Matcher) {
3013 extern const internal::ArgumentAdaptingMatcherFunc<
3014 internal::HasParentMatcher,
3015 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>,
3016 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
3030 extern const internal::ArgumentAdaptingMatcherFunc<
3031 internal::HasAncestorMatcher,
3032 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>,
3033 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
3045 extern const internal::VariadicOperatorMatcherFunc<1, 1>
unless;
3081 inline internal::PolymorphicMatcherWithParam1<
3082 internal::HasDeclarationMatcher, internal::Matcher<Decl>,
3083 void(internal::HasDeclarationSupportedTypes)>
3085 return internal::PolymorphicMatcherWithParam1<
3086 internal::HasDeclarationMatcher, internal::Matcher<Decl>,
3087 void(internal::HasDeclarationSupportedTypes)>(InnerMatcher);
3105 return UnderlyingDecl !=
nullptr &&
3106 InnerMatcher.matches(*UnderlyingDecl, Finder, Builder);
3129 const Expr *ExprNode =
Node.getImplicitObjectArgument()
3130 ->IgnoreParenImpCasts();
3131 return (ExprNode !=
nullptr &&
3132 InnerMatcher.matches(*ExprNode, Finder, Builder));
3149 return InnerMatcher.matches(TypeDecl, Finder, Builder);
3165 return Node.isClassMethod();
3181 return Node.isInstanceMethod();
3198 return Node.isClassMessage();
3215 return Node.isInstanceMessage();
3230 const Expr *ReceiverNode =
Node.getInstanceReceiver();
3231 return (ReceiverNode !=
nullptr &&
3259 extern const internal::VariadicFunction<internal::Matcher<ObjCMessageExpr>,
3273 assert(!RegExp.empty());
3274 std::string SelectorString =
Node.getSelector().getAsString();
3275 llvm::Regex RE(RegExp);
3276 return RE.match(SelectorString);
3284 return Node.getSelector().isNull();
3296 return Node.getSelector().isUnarySelector();
3312 return Node.getSelector().isKeywordSelector();
3327 return Node.getSelector().getNumArgs() == N;
3348 const Expr *ExprNode =
Node.getCallee();
3349 return (ExprNode !=
nullptr &&
3350 InnerMatcher.matches(*ExprNode, Finder, Builder));
3384 internal::Matcher<QualType>, InnerMatcher, 0) {
3387 return InnerMatcher.matches(QT, Finder, Builder);
3412 internal::Matcher<Decl>, InnerMatcher, 1) {
3429 if (!
Node.getTypeSourceInfo())
3432 return Inner.matches(
Node.getTypeSourceInfo()->getTypeLoc(), Finder, Builder);
3445 return Name ==
Node.getAsString();
3459 QualType, pointsTo, internal::Matcher<QualType>,
3461 return (!
Node.isNull() &&
Node->isAnyPointerType() &&
3462 InnerMatcher.matches(
Node->getPointeeType(), Finder, Builder));
3469 .matches(
Node, Finder, Builder);
3484 return InnerMatcher.matches(*
Node.getUnqualifiedDesugaredType(), Finder,
3503 return (!
Node.isNull() &&
Node->isReferenceType() &&
3504 InnerMatcher.matches(
Node->getPointeeType(), Finder, Builder));
3523 return InnerMatcher.matches(
Node.getCanonicalType(), Finder, Builder);
3530 .matches(
Node, Finder, Builder);
3551 internal::Matcher<Expr>, InnerMatcher) {
3552 const Expr *ExprNode =
Node.getImplicitObjectArgument();
3553 return (ExprNode !=
nullptr &&
3554 InnerMatcher.matches(*ExprNode, Finder, Builder));
3574 internal::Matcher<QualType>, InnerMatcher, 0) {
3575 return onImplicitObjectArgument(
3576 anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
3577 .matches(
Node, Finder, Builder);
3582 internal::Matcher<Decl>, InnerMatcher, 1) {
3583 return onImplicitObjectArgument(
3584 anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
3585 .matches(
Node, Finder, Builder);
3599 const Decl *DeclNode =
Node.getDecl();
3600 return (DeclNode !=
nullptr &&
3601 InnerMatcher.matches(*DeclNode, Finder, Builder));
3619 internal::Matcher<UsingShadowDecl>, InnerMatcher) {
3622 return InnerMatcher.matches(*
UsingDecl, Finder, Builder);
3643 return matchesFirstInPointerRange(InnerMatcher,
Node.decls_begin(),
3644 Node.decls_end(), Finder, Builder);
3657 if (
Node.isSingleDecl()) {
3658 const Decl *FoundDecl =
Node.getSingleDecl();
3659 return InnerMatcher.matches(*FoundDecl, Finder, Builder);
3673 VarDecl, hasInitializer, internal::Matcher<Expr>,
3676 return (Initializer !=
nullptr &&
3677 InnerMatcher.matches(*Initializer, Finder, Builder));
3691 return Node.isStaticLocal();
3706 return Node.hasLocalStorage();
3720 return Node.hasGlobalStorage();
3787 return Node.isExceptionVariable();
3803 return Node.getNumArgs() == N;
3818 unsigned, N, internal::Matcher<Expr>, InnerMatcher) {
3819 return (N <
Node.getNumArgs() &&
3820 InnerMatcher.matches(
3821 *
Node.getArg(N)->IgnoreParenImpCasts(), Finder, Builder));
3832 ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
3833 return N <
Node.getNumInits() &&
3834 InnerMatcher.matches(*
Node.getInit(N), Finder, Builder);
3872 internal::Matcher<Decl>, InnerMatcher) {
3877 std::advance(Iterator, N);
3878 return InnerMatcher.matches(**Iterator, Finder, Builder);
3895 return Node.getExceptionDecl() ==
nullptr;
3912 internal::Matcher<CXXCtorInitializer>, InnerMatcher) {
3913 return matchesFirstInPointerRange(InnerMatcher,
Node.init_begin(),
3914 Node.init_end(), Finder, Builder);
3931 internal::Matcher<FieldDecl>, InnerMatcher) {
3933 return (NodeAsDecl !=
nullptr &&
3934 InnerMatcher.matches(*NodeAsDecl, Finder, Builder));
3951 internal::Matcher<Expr>, InnerMatcher) {
3952 const Expr* NodeAsExpr =
Node.getInit();
3953 return (NodeAsExpr !=
nullptr &&
3954 InnerMatcher.matches(*NodeAsExpr, Finder, Builder));
3971 return Node.isWritten();
3991 return Node.isBaseInitializer();
4011 return Node.isMemberInitializer();
4037 internal::Matcher<Expr>, InnerMatcher) {
4038 for (
const Expr *Arg :
Node.arguments()) {
4039 BoundNodesTreeBuilder Result(*Builder);
4040 if (InnerMatcher.matches(*Arg, Finder, &Result)) {
4041 *Builder = std::move(Result);
4062 if (
Capture.capturesVariable()) {
4063 BoundNodesTreeBuilder Result(*Builder);
4064 if (InnerMatcher.matches(*
Capture.getCapturedVar(), Finder, &Result)) {
4065 *Builder = std::move(Result);
4086 internal::Matcher<CXXThisExpr>, InnerMatcher, 1) {
4088 return LC.capturesThis();
4094 return Node.isListInitialization();
4110 return Node.requiresZeroInitialization();
4137 unsigned, N, internal::Matcher<ParmVarDecl>,
4139 return (N <
Node.parameters().size()
4140 && InnerMatcher.matches(*
Node.parameters()[N], Finder, Builder));
4164 internal::Matcher<Expr>, ArgMatcher,
4165 internal::Matcher<ParmVarDecl>, ParamMatcher) {
4166 BoundNodesTreeBuilder Result;
4170 BoundNodesTreeBuilder Matches;
4172 .matches(
Node, Finder, &Matches)
4176 bool Matched =
false;
4177 for (; ArgIndex <
Node.getNumArgs(); ++ArgIndex) {
4178 BoundNodesTreeBuilder ArgMatches(*Builder);
4179 if (ArgMatcher.matches(*(
Node.getArg(ArgIndex)->IgnoreParenCasts()),
4180 Finder, &ArgMatches)) {
4181 BoundNodesTreeBuilder ParamMatches(ArgMatches);
4183 hasParameter(ParamIndex, ParamMatcher)))),
4185 hasParameter(ParamIndex, ParamMatcher))))))
4187 Result.addMatch(ParamMatches);
4193 *Builder = std::move(Result);
4232 internal::Matcher<ParmVarDecl>,
4234 return matchesFirstInPointerRange(InnerMatcher,
Node.param_begin(),
4235 Node.param_end(), Finder, Builder);
4259 return Node.getNumParams() == N;
4287 internal::Matcher<QualType>, InnerMatcher) {
4288 return InnerMatcher.matches(
Node.getReturnType(), Finder, Builder);
4308 return Node.isExternC();
4341 return Node.isDeleted();
4354 return Node.isDefaulted();
4376 return FnTy->hasDynamicExceptionSpec();
4429 return Node.isConstexpr();
4456 internal::Matcher<Stmt>, InnerMatcher) {
4457 const Stmt *Init =
Node.getInit();
4458 return Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder);
4472 internal::Matcher<Expr>, InnerMatcher) {
4473 const Expr *
const Condition =
Node.getCond();
4474 return (Condition !=
nullptr &&
4475 InnerMatcher.matches(*Condition, Finder, Builder));
4486 const Stmt *
const Then =
Node.getThen();
4487 return (Then !=
nullptr && InnerMatcher.matches(*Then, Finder, Builder));
4498 const Stmt *
const Else =
Node.getElse();
4499 return (Else !=
nullptr && InnerMatcher.matches(*Else, Finder, Builder));
4533 internal::NotEqualsBoundNodePredicate Predicate;
4536 return Builder->removeBindings(Predicate);
4548 internal::Matcher<DeclStmt>, InnerMatcher) {
4549 const DeclStmt*
const DeclarationStatement =
4550 Node.getConditionVariableDeclStmt();
4551 return DeclarationStatement !=
nullptr &&
4552 InnerMatcher.matches(*DeclarationStatement, Finder, Builder);
4565 internal::Matcher<Expr>, InnerMatcher) {
4566 if (
const Expr* Expression =
Node.getIdx())
4567 return InnerMatcher.matches(*Expression, Finder, Builder);
4582 internal::Matcher<Expr>, InnerMatcher) {
4583 if (
const Expr* Expression =
Node.getBase())
4584 return InnerMatcher.matches(*Expression, Finder, Builder);
4604 internal::Matcher<Stmt>, InnerMatcher) {
4605 const Stmt *
const Statement = internal::GetBodyMatcher<NodeType>::get(
Node);
4606 return (Statement !=
nullptr &&
4607 InnerMatcher.matches(*Statement, Finder, Builder));
4624 internal::Matcher<Stmt>, InnerMatcher) {
4626 return CS && matchesFirstInPointerRange(InnerMatcher, CS->
body_begin(),
4641 return Node.size() == N;
4669 template <
typename ValueT>
4670 internal::PolymorphicMatcherWithParam1<internal::ValueEqualsMatcher, ValueT>
4672 return internal::PolymorphicMatcherWithParam1<
4673 internal::ValueEqualsMatcher,
4682 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
4690 unsigned,
Value, 1) {
4691 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
4701 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
4715 std::string, Name) {
4716 return Name ==
Node.getOpcodeStr(
Node.getOpcode());
4736 return Node.isAssignmentOp();
4748 internal::Matcher<Expr>, InnerMatcher) {
4749 const Expr *LeftHandSide =
Node.getLHS();
4750 return (LeftHandSide !=
nullptr &&
4751 InnerMatcher.matches(*LeftHandSide, Finder, Builder));
4763 internal::Matcher<Expr>, InnerMatcher) {
4764 const Expr *RightHandSide =
Node.getRHS();
4765 return (RightHandSide !=
nullptr &&
4766 InnerMatcher.matches(*RightHandSide, Finder, Builder));
4772 const internal::Matcher<Expr> &InnerMatcher) {
4773 return anyOf(hasLHS(InnerMatcher), hasRHS(InnerMatcher));
4784 internal::Matcher<Expr>, InnerMatcher) {
4785 const Expr *
const Operand =
Node.getSubExpr();
4786 return (Operand !=
nullptr &&
4787 InnerMatcher.matches(*Operand, Finder, Builder));
4808 internal::Matcher<Expr>, InnerMatcher) {
4809 const Expr *
const SubExpression =
4810 internal::GetSourceExpressionMatcher<NodeType>::get(
Node);
4811 return (SubExpression !=
nullptr &&
4812 InnerMatcher.matches(*SubExpression, Finder, Builder));
4834 internal::Matcher<QualType>, InnerMatcher) {
4836 return InnerMatcher.matches(NodeType, Finder, Builder);
4844 internal::Matcher<QualType>, InnerMatcher) {
4845 return InnerMatcher.matches(
Node.getType(), Finder, Builder);
4857 return Node.isStruct();
4869 return Node.isUnion();
4881 return Node.isClass();
4896 internal::Matcher<Expr>, InnerMatcher) {
4897 const Expr *Expression =
Node.getTrueExpr();
4898 return (Expression !=
nullptr &&
4899 InnerMatcher.matches(*Expression, Finder, Builder));
4911 internal::Matcher<Expr>, InnerMatcher) {
4912 const Expr *Expression =
Node.getFalseExpr();
4913 return (Expression !=
nullptr &&
4914 InnerMatcher.matches(*Expression, Finder, Builder));
4941 return Node.isThisDeclarationADefinition();
4955 return Node.isVariadic();
4976 internal::Matcher<CXXRecordDecl>, InnerMatcher) {
4978 return (Parent !=
nullptr &&
4979 InnerMatcher.matches(*Parent, Finder, Builder));
5007 internal::Matcher<CXXMethodDecl>, InnerMatcher) {
5008 BoundNodesTreeBuilder Result;
5009 bool Matched =
false;
5010 for (
const auto *Overridden :
Node.overridden_methods()) {
5011 BoundNodesTreeBuilder OverriddenBuilder(*Builder);
5012 const bool OverriddenMatched =
5013 InnerMatcher.matches(*Overridden, Finder, &OverriddenBuilder);
5014 if (OverriddenMatched) {
5016 Result.addMatch(OverriddenBuilder);
5019 *Builder = std::move(Result);
5034 return Node.isVirtual();
5052 return Node.isVirtualAsWritten();
5073 return Node.template hasAttr<FinalAttr>();
5087 return Node.isPure();
5102 return Node.isConst();
5119 return Node.isCopyAssignmentOperator();
5136 return Node.isMoveAssignmentOperator();
5154 return Node.size_overridden_methods() > 0 ||
Node.hasAttr<OverrideAttr>();
5169 return Node.isUserProvided();
5199 return Node.isArrow();
5213 return Node->isIntegerType();
5227 return Node->isUnsignedIntegerType();
5241 return Node->isSignedIntegerType();
5255 return Node->isAnyCharacterType();
5275 return Node->isAnyPointerType();
5294 return Node.isConstQualified();
5313 return Node.isVolatileQualified();
5330 return Node.hasLocalQualifiers();
5346 internal::Matcher<ValueDecl>, InnerMatcher) {
5347 return InnerMatcher.matches(*
Node.getMemberDecl(), Finder, Builder);
5367 hasObjectExpression,
5370 internal::Matcher<Expr>, InnerMatcher) {
5371 if (
const auto *E = dyn_cast<UnresolvedMemberExpr>(&
Node))
5372 if (E->isImplicitAccess())
5374 if (
const auto *E = dyn_cast<CXXDependentScopeMemberExpr>(&
Node))
5375 if (E->isImplicitAccess())
5377 return InnerMatcher.matches(*
Node.getBase(), Finder, Builder);
5390 internal::Matcher<UsingShadowDecl>, InnerMatcher) {
5391 return matchesFirstInPointerRange(InnerMatcher,
Node.shadow_begin(),
5392 Node.shadow_end(), Finder, Builder);
5408 internal::Matcher<NamedDecl>, InnerMatcher) {
5409 return InnerMatcher.matches(*
Node.getTargetDecl(), Finder, Builder);
5443 Node.getTemplateSpecializationKind() ==
5445 Node.getTemplateSpecializationKind() ==
5507 internal::Matcher<QualType>, InnerMatcher, 0) {
5508 return internal::BindableMatcher<TypeLoc>(
5509 new internal::TypeLocTypeMatcher(InnerMatcher));
5521 return Node.isBooleanType();
5533 return Node.isVoidType();
5536 template <
typename NodeType>
5585 return Node.isRealFloatingType();
5638 return internal::HasSizeMatcher<NodeType>::hasSize(
Node, N);
5694 internal::Matcher<Expr>, InnerMatcher) {
5695 return InnerMatcher.matches(*
Node.getSizeExpr(), Finder, Builder);
5940 pointee, getPointee,
6061 internal::Matcher<NestedNameSpecifier>, InnerMatcher) {
6063 return InnerMatcher.matches(*Qualifier, Finder, Builder);
6085 return InnerMatcher.matches(
Node.getNamedType(), Finder, Builder);
6116 hasReplacementType, getReplacementType,
6155 return InnerType.matches(
Node.getDecayedType(), Finder, Builder);
6174 if (!DC)
return false;
6191 extern const internal::VariadicAllOfMatcher<NestedNameSpecifier>
6195 extern const internal::VariadicAllOfMatcher<NestedNameSpecifierLoc>
6201 internal::BindableMatcher<NestedNameSpecifierLoc>, loc,
6202 internal::Matcher<NestedNameSpecifier>, InnerMatcher, 1) {
6203 return internal::BindableMatcher<NestedNameSpecifierLoc>(
6204 new internal::LocMatcher<NestedNameSpecifierLoc, NestedNameSpecifier>(
6221 internal::Matcher<QualType>, InnerMatcher) {
6222 if (!
Node.getAsType())
6224 return InnerMatcher.matches(
QualType(
Node.getAsType(), 0), Finder, Builder);
6239 internal::Matcher<TypeLoc>, InnerMatcher) {
6240 return Node &&
Node.getNestedNameSpecifier()->getAsType() &&
6241 InnerMatcher.matches(
Node.getTypeLoc(), Finder, Builder);
6254 internal::Matcher<NestedNameSpecifier>, InnerMatcher,
6259 return InnerMatcher.matches(*NextNode, Finder, Builder);
6272 internal::Matcher<NestedNameSpecifierLoc>, InnerMatcher,
6277 return InnerMatcher.matches(NextNode, Finder, Builder);
6291 internal::Matcher<NamespaceDecl>, InnerMatcher) {
6292 if (!
Node.getAsNamespace())
6294 return InnerMatcher.matches(*
Node.getAsNamespace(), Finder, Builder);
6305 return &
Node == Other;
6311 return &
Node == Other;
6317 return &
Node == Other;
6335 BoundNodesTreeBuilder Result;
6340 bool Matched =
false;
6342 SC = SC->getNextSwitchCase()) {
6343 BoundNodesTreeBuilder CaseBuilder(*Builder);
6344 bool CaseMatched = InnerMatcher.matches(*SC, Finder, &CaseBuilder);
6347 Result.addMatch(CaseBuilder);
6350 *Builder = std::move(Result);
6365 internal::Matcher<CXXCtorInitializer>, InnerMatcher) {
6366 BoundNodesTreeBuilder Result;
6367 bool Matched =
false;
6368 for (
const auto *I :
Node.inits()) {
6369 BoundNodesTreeBuilder InitBuilder(*Builder);
6370 if (InnerMatcher.matches(*I, Finder, &InitBuilder)) {
6372 Result.addMatch(InitBuilder);
6375 *Builder = std::move(Result);
6391 return Node.isCopyConstructor();
6406 return Node.isMoveConstructor();
6421 return Node.isDefaultConstructor();
6438 return Node.isDelegatingConstructor();
6466 return Node.isExplicit();
6495 return InnerMatcher.matches(*ES.
getExpr(), Finder, Builder);
6516 if (
const auto *FD = dyn_cast<FunctionDecl>(&
Node))
6517 return FD->isInlineSpecified();
6518 else if (
const auto *NSD = dyn_cast<NamespaceDecl>(&
Node))
6519 return NSD->isInline();
6520 llvm_unreachable(
"Not a valid polymorphic type");
6533 return Node.isAnonymousNamespace();
6573 return InnerMatcher.matches(*
Node.getLHS(), Finder, Builder);
6586 for (
const auto *
Attr :
Node.attrs()) {
6606 return InnerMatcher.matches(*
RetValue, Finder, Builder);
6616 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr>
6635 return Node.isNullPointerConstant(Finder->getASTContext(),
6653 const auto &Parents = Finder->getASTContext().getParents(
Node);
6657 while(!Stack.empty()) {
6658 const auto &CurNode = Stack.back();
6660 if(
const auto *FuncDeclNode = CurNode.get<
FunctionDecl>()) {
6661 if(InnerMatcher.matches(*FuncDeclNode, Finder, Builder)) {
6664 }
else if(
const auto *LambdaExprNode = CurNode.get<
LambdaExpr>()) {
6665 if(InnerMatcher.matches(*LambdaExprNode->getCallOperator(),
6670 for(
const auto &
Parent: Finder->getASTContext().getParents(CurNode))
6698 return Node.hasExternalFormalLinkage();
6723 return Node.hasDefaultArg();
6735 return Node.isArray();
6747 return Node.isArray() && *
Node.getArraySize() &&
6748 InnerMatcher.matches(**
Node.getArraySize(), Finder, Builder);
6759 return Node.hasDefinition();
6770 return Node.isScoped();
6782 return F->hasTrailingReturn();
6810 ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
6818 if (
const auto *CleanupsExpr = dyn_cast<ExprWithCleanups>(&
Node))
6819 E = CleanupsExpr->getSubExpr();
6820 if (
const auto *CtorExpr = dyn_cast<CXXConstructExpr>(E)) {
6821 if (CtorExpr->isElidable()) {
6822 if (
const auto *MaterializeTemp =
6823 dyn_cast<MaterializeTemporaryExpr>(CtorExpr->getArg(0))) {
6824 return InnerMatcher.matches(*MaterializeTemp->getSubExpr(), Finder,
6829 return InnerMatcher.matches(
Node, Finder, Builder);
6848 extern const internal::VariadicDynCastAllOfMatcher<Stmt, OMPExecutableDirective>
6865 return Node.isStandaloneDirective();
6897 internal::Matcher<Stmt>, InnerMatcher) {
6898 if (
Node.isStandaloneDirective())
6900 return InnerMatcher.matches(*
Node.getStructuredBlock(), Finder, Builder);
6915 internal::Matcher<OMPClause>, InnerMatcher) {
6917 return matchesFirstInPointerRange(InnerMatcher, Clauses.begin(),
6918 Clauses.end(), Finder, Builder);
6932 extern const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPDefaultClause>
6947 return Node.getDefaultKind() == OMPC_DEFAULT_none;
6962 return Node.getDefaultKind() == OMPC_DEFAULT_shared;
6985 Node.getDirectiveKind(), CKind,
6986 Finder->getASTContext().getLangOpts().OpenMP);
6996 #endif // LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThisExpr > cxxThisExpr
Matches implicit and explicit this expressions.
A call to an overloaded operator written using operator syntax.
internal::TrueMatcher anything()
Matches any node.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Decl, NonTypeTemplateParmDecl > nonTypeTemplateParmDecl
Matches non-type template parameter declarations.
Defines the clang::ASTContext interface.
Represents a type that was referred to using an elaborated type keyword, e.g., struct S...
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtThrowStmt > objcThrowStmt
Matches Objective-C @throw statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr
Matches call expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenExpr > parenExpr
Matches parentheses used in expressions.
Represents a function declaration or definition.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefDecl > typedefDecl
Matches typedef declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, LinkageSpecDecl > linkageSpecDecl
Matches a declaration of a linkage specification.
Smart pointer class that efficiently represents Objective-C method names.
PointerType - C99 6.7.5.1 - Pointer Declarators.
A (possibly-)qualified type.
const AstTypeMatcher< DecltypeType > decltypeType
Matches types nodes representing C++11 decltype(<expr>) types.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachMatcher > forEach
Matches AST nodes that have child AST nodes that match the provided matcher.
internal::Matcher< NestedNameSpecifier > NestedNameSpecifierMatcher
AST_MATCHER_P(FieldDecl, hasBitWidth, unsigned, Width)
Matches non-static data members that are bit-fields of the specified bit width.
const AstTypeMatcher< UnaryTransformType > unaryTransformType
Matches types nodes representing unary type transformations.
Defines enumerations for the type traits support.
const internal::VariadicAllOfMatcher< Stmt > stmt
Matches statements.
static Decl * castFromDeclContext(const DeclContext *)
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXUnresolvedConstructExpr > cxxUnresolvedConstructExpr
Matches unresolved constructor call expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCInterfaceDecl > objcInterfaceDecl
Matches Objective-C interface declarations.
const internal::ArgumentAdaptingMatcherFunc< internal::HasMatcher > has
Matches AST nodes that have child AST nodes that match the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBindTemporaryExpr > cxxBindTemporaryExpr
Matches nodes where temporaries are created.
Stmt - This represents one statement.
internal::Matcher< Stmt > StatementMatcher
const internal::VariadicDynCastAllOfMatcher< Decl, RecordDecl > recordDecl
Matches class, struct, and union declarations.
IfStmt - This represents an if/then/else.
internal::PolymorphicMatcherWithParam1< internal::HasDeclarationMatcher, internal::Matcher< Decl >, void(internal::HasDeclarationSupportedTypes)> hasDeclaration(const internal::Matcher< Decl > &InnerMatcher)
Matches a node if the declaration associated with that node matches the given matcher.
const internal::VariadicFunction< internal::Matcher< ObjCMessageExpr >, StringRef, internal::hasAnySelectorFunc > hasAnySelector
Matches when at least one of the supplied string equals to the Selector.getAsString() ...
C Language Family Type Representation.
Defines the SourceManager interface.
const AstTypeMatcher< TagType > tagType
Matches tag types (record and enum types).
The template argument is an expression, and we've not resolved it to one of the other forms yet...
internal::BoundNodesMap::IDToNodeMap IDToNodeMap
Type of mapping from binding identifiers to bound nodes.
const internal::VariadicDynCastAllOfMatcher< OMPClause, OMPDefaultClause > ompDefaultClause
Matches OpenMP default clause.
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> anyOf
Matches if any of the given matchers matches.
Decl - This represents one declaration (or definition), e.g.
Defines the C++ template declaration subclasses.
Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained by a type-constraint.
const internal::ArgumentAdaptingMatcherFunc< internal::HasDescendantMatcher > hasDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
const AstTypeMatcher< FunctionType > functionType
Matches FunctionType nodes.
The base class of the type hierarchy.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImaginaryLiteral > imaginaryLiteral
Matches imaginary literals, which are based on integer and floating point literals e...
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.
Represent a C++ namespace.
Represents a call to a C++ constructor.
AST_POLYMORPHIC_MATCHER_P_OVERLOAD(isDerivedFrom, AST_POLYMORPHIC_SUPPORTED_TYPES(CXXRecordDecl, ObjCInterfaceDecl), std::string, BaseName, 1)
Overloaded method as shortcut for isDerivedFrom(hasName(...)).
Store information needed for an explicit specifier.
Describes the capture of a variable or of this, or of a C++1y init-capture.
Represents a C++ constructor within a class.
Represents a prvalue temporary that is written into memory so that a reference can bind to it...
float __ovld __cnfn distance(float p0, float p1)
Returns the distance between p0 and p1.
const AstTypeMatcher< SubstTemplateTypeParmType > substTemplateTypeParmType
Matches types that represent the result of substituting a type for a template type parameter...
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> eachOf
Matches if any of the given matchers matches.
const AstTypeMatcher< AutoType > autoType
Matches types nodes representing C++11 auto types.
const AstTypeMatcher< RValueReferenceType > rValueReferenceType
Matches rvalue reference types.
const internal::VariadicAllOfMatcher< TemplateName > templateName
Matches template name.
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.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtTryStmt > objcTryStmt
Matches Objective-C statements.
const AstTypeMatcher< PointerType > pointerType
Matches pointer types, but does not match Objective-C object pointer types.
const internal::VariadicDynCastAllOfMatcher< Stmt, Expr > expr
Matches expressions.
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> allOf
Matches if all given matchers match.
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator > binaryOperator
Matches binary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStdInitializerListExpr > cxxStdInitializerListExpr
Matches C++ initializer list expressions.
AST_MATCHER(Decl, isPublic)
Matches public C++ declarations.
Matcher< NamedDecl > hasAnyNameFunc(ArrayRef< const StringRef *> NameRefs)
internal::PolymorphicMatcherWithParam1< internal::ValueEqualsMatcher, ValueT > equals(const ValueT &Value)
Matches literals that are equal to the given value of type ValueT.
ObjCMethodDecl - Represents an instance or class method declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCIvarRefExpr > objcIvarRefExpr
Matches a reference to an ObjCIvar.
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
const internal::VariadicDynCastAllOfMatcher< Decl, VarDecl > varDecl
Matches variable declarations.
Defines the Objective-C statement AST node classes.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionDecl > functionDecl
Matches function declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, BlockExpr > blockExpr
Matches a reference to a block.
const internal::VariadicDynCastAllOfMatcher< Decl, NamedDecl > namedDecl
Matches a declaration of anything that could have a name.
Represents a parameter to a function.
Represents the result of substituting a type for a template type parameter.
Defines the clang::Expr interface and subclasses for C++ expressions.
const AstTypeMatcher< BuiltinType > builtinType
Matches builtin Types.
internal::Matcher< QualType > TypeMatcher
AST_POLYMORPHIC_MATCHER_P2(hasTemplateArgument, AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl, TemplateSpecializationType, FunctionDecl), unsigned, N, internal::Matcher< TemplateArgument >, InnerMatcher)
Matches classTemplateSpecializations, templateSpecializationType and functionDecl where the n'th Temp...
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThrowExpr > cxxThrowExpr
Matches throw expressions.
Base wrapper for a particular "section" of type source info.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumDecl > enumDecl
Matches enum declarations.
const AstTypeMatcher< RecordType > recordType
Matches record types (e.g.
Represents a struct/union/class.
Represents a C99 designated initializer expression.
Represents a class template specialization, which refers to a class template with a given set of temp...
bool isNothrow(bool ResultIfDependent=false) const
Determine whether this function type has a non-throwing exception specification.
DeclGroupRef::const_iterator const_decl_iterator
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateDecl > classTemplateDecl
Matches C++ class template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryDecl > objcCategoryDecl
Matches Objective-C category declarations.
A C++ nested-name-specifier augmented with source location information.
The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...
Used for GCC's __alignof.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXOperatorCallExpr > cxxOperatorCallExpr
Matches overloaded operator calls.
const IDToNodeMap & getMap() const
Retrieve mapping from binding identifiers to bound nodes.
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasTemplateDecl > typeAliasTemplateDecl
Matches type alias template declarations.
Represents a member of a struct/union/class.
const internal::VariadicDynCastAllOfMatcher< Stmt, DesignatedInitExpr > designatedInitExpr
Matches C99 designated initializer expressions [C99 6.7.8].
Defines the ExceptionSpecificationType enumeration and various utility functions. ...
const AstTypeMatcher< InjectedClassNameType > injectedClassNameType
Matches injected class name types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNullPtrLiteralExpr > cxxNullPtrLiteralExpr
Matches nullptr literal.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConstantExpr > constantExpr
Matches a constant expression wrapper.
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
const AstTypeMatcher< DependentSizedArrayType > dependentSizedArrayType
Matches C++ arrays whose size is a value-dependent expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTryStmt > cxxTryStmt
Matches try statements.
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
Defines the clang::attr::Kind enum.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStaticCastExpr > cxxStaticCastExpr
Matches a C++ static_cast expression.
__DEVICE__ int max(int __a, int __b)
internal::VariadicDynCastAllOfMatcher< Type, NodeType > AstTypeMatcher
const AstTypeMatcher< TypedefType > typedefType
Matches typedef types.
const internal::VariadicDynCastAllOfMatcher< Stmt, GotoStmt > gotoStmt
Matches goto statements.
const AstTypeMatcher< ComplexType > complexType
Matches C99 complex types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXFunctionalCastExpr > cxxFunctionalCastExpr
Matches functional cast expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXReinterpretCastExpr > cxxReinterpretCastExpr
Matches a reinterpret_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, FloatingLiteral > floatLiteral
Matches float literals of all sizes / encodings, e.g.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt > declStmt
Matches declaration statements.
Describes an C or C++ initializer list.
Represents a C++ using-declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, OpaqueValueExpr > opaqueValueExpr
Matches opaque value expressions.
const AstTypeMatcher< MemberPointerType > memberPointerType
Matches member pointer types.
ForStmt - This represents a 'for (init;cond;inc)' stmt.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclRefExpr > declRefExpr
Matches expressions that refer to declarations.
bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind, unsigned OpenMPVersion)
const internal::VariadicDynCastAllOfMatcher< Stmt, IfStmt > ifStmt
Matches if statements.
AST_MATCHER_FUNCTION(internal::Matcher< Decl >, isInstantiated)
Matches declarations that are template instantiations or are inside template instantiations.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
const T * getNodeAs(StringRef ID) const
Returns the AST node bound to ID.
const internal::VariadicDynCastAllOfMatcher< Stmt, OMPExecutableDirective > ompExecutableDirective
Matches any #pragma omp executable directive.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceDecl > namespaceDecl
Matches a declaration of a namespace.
SourceLocation getExpansionLoc(SourceLocation Loc) const
Given a SourceLocation object Loc, return the expansion location referenced by the ID...
Represents a declaration of a type.
A builtin binary operation expression such as "x + y" or "x <= y".
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitValueInitExpr > implicitValueInitExpr
Matches implicit initializers of init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchCase > switchCase
Matches case and default statements inside switch statements.
const internal::VariadicFunction< internal::Matcher< NamedDecl >, StringRef, internal::hasAnyNameFunc > hasAnyName
Matches NamedDecl nodes that have any of the specified names.
This represents 'default' clause in the '#pragma omp ...' directive.
CaseStmt - Represent a case statement.
const internal::VariadicDynCastAllOfMatcher< Stmt, UserDefinedLiteral > userDefinedLiteral
Matches user defined literal operator call.
internal::Matcher< Stmt > sizeOfExpr(const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
Same as unaryExprOrTypeTraitExpr, but only matching sizeof.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
const AstTypeMatcher< VariableArrayType > variableArrayType
Matches C arrays with a specified size that is not an integer-constant-expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CastExpr > castExpr
Matches any cast nodes of Clang's AST.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
internal::PolymorphicMatcherWithParam1< internal::HasOverloadedOperatorNameMatcher, StringRef, AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr, FunctionDecl)> hasOverloadedOperatorName(StringRef Name)
Matches overloaded operator names.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
const internal::VariadicDynCastAllOfMatcher< Decl, ValueDecl > valueDecl
Matches any value declaration.
Represents an ObjC class declaration.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCPropertyDecl > objcPropertyDecl
Matches Objective-C property declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtFinallyStmt > objcFinallyStmt
Matches Objective-C statements.
internal::Matcher< T > findAll(const internal::Matcher< T > &Matcher)
Matches if the node or any descendant matches.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionTemplateDecl > functionTemplateDecl
Matches C++ function template declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXCatchStmt > cxxCatchStmt
Matches catch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateSpecializationDecl > classTemplateSpecializationDecl
Matches C++ class template specializations.
const internal::VariadicDynCastAllOfMatcher< Stmt, MaterializeTemporaryExpr > materializeTemporaryExpr
Matches nodes where temporaries are materialized.
const internal::VariadicDynCastAllOfMatcher< Stmt, CaseStmt > caseStmt
Matches case statements inside switch statements.
const AstTypeMatcher< ParenType > parenType
Matches ParenType nodes.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDirectiveDecl > usingDirectiveDecl
Matches using namespace declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ChooseExpr > chooseExpr
Matches GNU __builtin_choose_expr.
CompoundStmt - This represents a group of statements like { stmt stmt }.
Represents a prototype with parameter type info, e.g.
const internal::VariadicOperatorMatcherFunc< 1, std::numeric_limits< unsigned >::max()> optionally
Matches any node regardless of the submatchers.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachDescendantMatcher > forEachDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
Represents a ValueDecl that came out of a declarator.
CastKind
CastKind - The kind of operation required for a conversion.
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand...
const internal::VariadicDynCastAllOfMatcher< Stmt, AsmStmt > asmStmt
Matches asm statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplatePartialSpecializationDecl > classTemplatePartialSpecializationDecl
Matches C++ class template partial specializations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAutoreleasePoolStmt > autoreleasePoolStmt
Matches an Objective-C autorelease pool statement.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDeductionGuideDecl > cxxDeductionGuideDecl
Matches user-defined and implicitly generated deduction guide.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingTypenameDecl > unresolvedUsingTypenameDecl
Matches unresolved using value declarations that involve the typename.
const internal::VariadicDynCastAllOfMatcher< Stmt, MemberExpr > memberExpr
Matches member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, AddrLabelExpr > addrLabelExpr
Matches address of label statements (GNU extension).
const internal::VariadicDynCastAllOfMatcher< Stmt, ExplicitCastExpr > explicitCastExpr
Matches explicit cast expressions.
Represents a block literal declaration, which is like an unnamed FunctionDecl.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
This represents one expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchStmt > switchStmt
Matches switch statements.
bool isInSystemHeader(SourceLocation Loc) const
Returns if a SourceLocation is in a system header.
const FileEntry * getFileEntryForID(FileID FID) const
Returns the FileEntry record for the provided FileID.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnresolvedLookupExpr > unresolvedLookupExpr
Matches reference to a name that can be looked up during parsing but could not be resolved to a speci...
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryConditionalOperator > binaryConditionalOperator
Matches binary conditional operator expressions (GNU extension).
const internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
const AstTypeMatcher< IncompleteArrayType > incompleteArrayType
Matches C arrays with unspecified size.
const internal::VariadicDynCastAllOfMatcher< Stmt, LabelStmt > labelStmt
Matches label statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CStyleCastExpr > cStyleCastExpr
Matches a C-style cast expression.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceAliasDecl > namespaceAliasDecl
Matches a declaration of a namespace alias.
OpenMPClauseKind
OpenMP clauses.
const internal::VariadicDynCastAllOfMatcher< Decl, FieldDecl > fieldDecl
Matches field declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnresolvedMemberExpr > unresolvedMemberExpr
Matches unresolved member expressions.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
Represents the type decltype(expr) (C++11).
const Expr * getExpr() const
const internal::VariadicDynCastAllOfMatcher< Stmt, ConditionalOperator > conditionalOperator
Matches conditional operator expressions.
static SVal getValue(SVal val, SValBuilder &svalBuilder)
Defines the clang::TypeLoc interface and its subclasses.
const AstTypeMatcher< ArrayType > arrayType
Matches all kinds of arrays.
Specifies that a value-dependent expression of integral or dependent type should be considered a null...
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefNameDecl > typedefNameDecl
Matches typedef name declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, SubstNonTypeTemplateParmExpr > substNonTypeTemplateParmExpr
Matches substitutions of non-type template parameters.
const internal::VariadicDynCastAllOfMatcher< Stmt, ReturnStmt > returnStmt
Matches return statements.
const AstTypeMatcher< FunctionProtoType > functionProtoType
Matches FunctionProtoType nodes.
ReturnStmt - This represents a return, optionally of an expression: return; return 4;...
const internal::VariadicDynCastAllOfMatcher< Stmt, CUDAKernelCallExpr > cudaKernelCallExpr
Matches CUDA kernel call expression.
An expression that sends a message to the given Objective-C object or class.
static bool hasDefinition(const ObjCObjectPointerType *ObjPtr)
UnaryOperator - This represents the unary-expression's (except sizeof and alignof), the postinc/postdec operators from postfix-expression, and various extensions.
const AstTypeMatcher< AtomicType > atomicType
Matches atomic types.
AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType))
Matches AutoType nodes where the deduced type is a specific type.
Represents a reference to a non-type template parameter that has been substituted with a template arg...
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryImplDecl > objcCategoryImplDecl
Matches Objective-C category definitions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ExprWithCleanups > exprWithCleanups
Matches expressions that introduce cleanups to be run at the end of the sub-expression's evaluation...
Represents a C++ deduction guide declaration.
Represents a C++ conversion function within a class.
const internal::VariadicDynCastAllOfMatcher< Decl, FriendDecl > friendDecl
Matches friend declarations.
This template specialization was implicitly instantiated from a template.
const internal::VariadicDynCastAllOfMatcher< Stmt, DoStmt > doStmt
Matches do statements.
bool isNull() const
Return true if this QualType doesn't point to a type yet.
const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc > > hasAncestor
Matches AST nodes that have an ancestor that matches the provided matcher.
bool isTemplateInstantiation(TemplateSpecializationKind Kind)
Determine whether this template specialization kind refers to an instantiation of an entity (as oppos...
const AstTypeMatcher< TemplateSpecializationType > templateSpecializationType
Matches template specialization types.
This file defines OpenMP AST classes for clauses.
DoStmt - This represents a 'do/while' stmt.
const internal::VariadicAllOfMatcher< NestedNameSpecifierLoc > nestedNameSpecifierLoc
Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
Maps string IDs to AST nodes matched by parts of a matcher.
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class...
std::string getAsString() const
Derive the full selector name (e.g.
friend class internal::BoundNodesTreeBuilder
const internal::VariadicDynCastAllOfMatcher< Stmt, PredefinedExpr > predefinedExpr
Matches predefined identifier expressions [C99 6.4.2.2].
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
AST_MATCHER_FUNCTION_P_OVERLOAD(internal::BindableMatcher< TypeLoc >, loc, internal::Matcher< QualType >, InnerMatcher, 0)
Matches TypeLocs for which the given inner QualType-matcher matches.
const internal::VariadicDynCastAllOfMatcher< Decl, LabelDecl > labelDecl
Matches a declaration of label.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXMemberCallExpr > cxxMemberCallExpr
Matches member call expressions.
Sugar for parentheses used when specifying types.
StringRef getName() const
const internal::VariadicDynCastAllOfMatcher< Decl, ParmVarDecl > parmVarDecl
Matches parameter variable declarations.
This is a basic class for representing single OpenMP executable directive.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)"...
Represents the declaration of a struct/union/class/enum.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstCastExpr > cxxConstCastExpr
Matches a const_cast expression.
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasDecl > typeAliasDecl
Matches type alias declarations.
Represents a call to a member function that may be written either with member call syntax (e...
const internal::VariadicAllOfMatcher< CXXCtorInitializer > cxxCtorInitializer
Matches constructor initializers.
DeclStmt - Adaptor class for mixing declarations with statements and expressions. ...
static QualType getUnderlyingType(const SubRegion *R)
const internal::VariadicDynCastAllOfMatcher< Stmt, GNUNullExpr > gnuNullExpr
Matches GNU __null expression.
Represents a dependent using declaration which was not marked with typename.
const internal::VariadicDynCastAllOfMatcher< Stmt, BreakStmt > breakStmt
Matches break statements.
Cached information about one file (either on disk or in the virtual file system). ...
const internal::VariadicDynCastAllOfMatcher< Decl, CXXMethodDecl > cxxMethodDecl
Matches method declarations.
AST_POLYMORPHIC_MATCHER_P(isExpansionInFileMatching, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc), std::string, RegExp)
Matches AST nodes that were expanded within files whose name is partially matching a given regex...
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDynamicCastExpr > cxxDynamicCastExpr
Matches a dynamic_cast expression.
Represents a static or instance method of a struct/union/class.
internal::Matcher< Stmt > alignOfExpr(const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
Same as unaryExprOrTypeTraitExpr, but only matching alignof.
static bool hasAttr(const FunctionDecl *D, bool IgnoreImplicitAttr)
const internal::VariadicDynCastAllOfMatcher< Stmt, DefaultStmt > defaultStmt
Matches default statements inside switch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, TranslationUnitDecl > translationUnitDecl
Matches the top declaration context.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXForRangeStmt > cxxForRangeStmt
Matches range-based for statements.
const internal::VariadicAllOfMatcher< TypeLoc > typeLoc
Matches TypeLocs in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral > integerLiteral
Matches integer literals of all sizes / encodings, e.g.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstructExpr > cxxConstructExpr
Matches constructor call expressions (including implicit ones).
const internal::VariadicAllOfMatcher< QualType > qualType
Matches QualTypes in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Decl, TemplateTypeParmDecl > templateTypeParmDecl
Matches template type parameter declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCMethodDecl > objcMethodDecl
Matches Objective-C method declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDecl > usingDecl
Matches using declarations.
bool isInMainFile(SourceLocation Loc) const
Returns whether the PresumedLoc for a given SourceLocation is in the main file.
const internal::VariadicDynCastAllOfMatcher< Stmt, ArraySubscriptExpr > arraySubscriptExpr
Matches array subscript expressions.
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
static bool RetValue(InterpState &S, CodePtr &Pt, APValue &Result)
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryExprOrTypeTraitExpr > unaryExprOrTypeTraitExpr
Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc > > hasParent
Matches AST nodes that have a parent that matches the provided matcher.
#define AST_POLYMORPHIC_SUPPORTED_TYPES(...)
Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER* macros.
Used for C's _Alignof and C++'s alignof.
This template specialization was instantiated from a template due to an explicit instantiation defini...
static ExplicitSpecifier getFromDecl(FunctionDecl *Function)
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCIvarDecl > objcIvarDecl
Matches Objective-C instance variable declarations.
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
const internal::VariadicOperatorMatcherFunc< 1, 1 > unless
Matches if the provided matcher does not match.
static DynTypedNode create(const T &Node)
Creates a DynTypedNode from Node.
const internal::VariadicDynCastAllOfMatcher< Stmt, ForStmt > forStmt
Matches for statements.
ExceptionSpecificationType getExceptionSpecType() const
Get the kind of exception specification on this function.
Represents a pointer type decayed from an array or function type.
BoundNodesTreeBuilder BoundNodes
Defines various enumerations that describe declaration and type specifiers.
Base class for declarations which introduce a typedef-name.
ast_type_traits::DynTypedNode Node
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCImplementationDecl > objcImplementationDecl
Matches Objective-C implementation declarations.
Represents a template argument.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundLiteralExpr > compoundLiteralExpr
Matches compound (i.e.
Dataflow Directional Tag Classes.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
const internal::VariadicDynCastAllOfMatcher< Stmt, AtomicExpr > atomicExpr
Matches atomic builtins.
const internal::VariadicDynCastAllOfMatcher< Decl, StaticAssertDecl > staticAssertDecl
Matches a C++ static_assert declaration.
const AstTypeMatcher< ElaboratedType > elaboratedType
Matches types specified with an elaborated type keyword or with a qualified name. ...
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenListExpr > parenListExpr
Matches paren list expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConversionDecl > cxxConversionDecl
Matches conversion operator declarations.
const internal::VariadicAllOfMatcher< TemplateArgument > templateArgument
Matches template arguments.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCProtocolDecl > objcProtocolDecl
Matches Objective-C protocol declarations.
const AstTypeMatcher< DecayedType > decayedType
Matches decayed type Example matches i[] in declaration of f.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXRecordDecl > cxxRecordDecl
Matches C++ class declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDefaultArgExpr > cxxDefaultArgExpr
Matches the value of a default argument at the call site.
This template specialization was instantiated from a template due to an explicit instantiation declar...
Represents a dependent using declaration which was marked with typename.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingValueDecl > unresolvedUsingValueDecl
Matches unresolved using value declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, NullStmt > nullStmt
Matches null statements.
A pointer to member type per C++ 8.3.3 - Pointers to members.
ExplicitCastExpr - An explicit cast written in the source code.
const internal::VariadicDynCastAllOfMatcher< Decl, IndirectFieldDecl > indirectFieldDecl
Matches indirect field declarations.
internal::Matcher< CXXCtorInitializer > CXXCtorInitializerMatcher
body_iterator body_begin()
Expr * IgnoreParenImpCasts() LLVM_READONLY
Skip past any parentheses and implicit casts which might surround this expression until reaching a fi...
SwitchStmt - This represents a 'switch' stmt.
FileID getFileID(SourceLocation SpellingLoc) const
Return the FileID for a SourceLocation.
Complex values, per C99 6.2.5p11.
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
This file defines OpenMP AST classes for executable directives and clauses.
AbstractConditionalOperator - An abstract base class for ConditionalOperator and BinaryConditionalOpe...
Represents a C++ base or member initializer.
This template specialization was declared or defined by an explicit specialization (C++ [temp...
const internal::VariadicDynCastAllOfMatcher< Stmt, LambdaExpr > lambdaExpr
Matches lambda expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNewExpr > cxxNewExpr
Matches new expressions.
TraversalKind
Defines how we descend a level in the AST when we pass through expressions.
Base for LValueReferenceType and RValueReferenceType.
The template argument is a type.
const internal::VariadicDynCastAllOfMatcher< Stmt, InitListExpr > initListExpr
Matches init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDeleteExpr > cxxDeleteExpr
Matches delete expressions.
AST_POLYMORPHIC_MATCHER(isExpansionInMainFile, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc))
Matches AST nodes that were expanded within the main-file.
const internal::VariadicDynCastAllOfMatcher< Stmt, ContinueStmt > continueStmt
Matches continue statements.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumConstantDecl > enumConstantDecl
Matches enum constants.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtCatchStmt > objcCatchStmt
Matches Objective-C statements.
internal::Matcher< BinaryOperator > hasEitherOperand(const internal::Matcher< Expr > &InnerMatcher)
Matches if either the left hand side or the right hand side of a binary operator matches.
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator > unaryOperator
Matches unary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CharacterLiteral > characterLiteral
Matches character literals (also matches wchar_t).
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
__PTRDIFF_TYPE__ ptrdiff_t
A signed integer type that is the result of subtracting two pointers.
static bool isInstanceMethod(const Decl *D)
internal::Matcher< T > traverse(ast_type_traits::TraversalKind TK, const internal::Matcher< T > &InnerMatcher)
Causes all nested matchers to be matched with the specified traversal kind.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTemporaryObjectExpr > cxxTemporaryObjectExpr
Matches functional cast expressions having N != 1 arguments.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConstructorDecl > cxxConstructorDecl
Matches C++ constructor declarations.
Represents a C++ struct/union/class.
The template argument is a template name that was provided for a template template parameter...
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDependentScopeMemberExpr > cxxDependentScopeMemberExpr
Matches member expressions where the actual member referenced could not be resolved because the base ...
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
CXXCatchStmt - This represents a C++ catch block.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitCastExpr > implicitCastExpr
Matches the implicit cast nodes of Clang's AST.
const internal::VariadicAllOfMatcher< NestedNameSpecifier > nestedNameSpecifier
Matches nested name specifiers.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBoolLiteralExpr > cxxBoolLiteral
Matches bool literals.
WhileStmt - This represents a 'while' stmt.
internal::Matcher< NamedDecl > hasName(const std::string &Name)
Matches NamedDecl nodes that have the specified name.
internal::Matcher< NestedNameSpecifierLoc > NestedNameSpecifierLocMatcher
Declaration of a class template.
const internal::VariadicDynCastAllOfMatcher< Stmt, StmtExpr > stmtExpr
Matches statement expression (GNU extension).
const AstTypeMatcher< ObjCObjectPointerType > objcObjectPointerType
Matches an Objective-C object pointer type, which is different from a pointer type, despite being syntactically similar.
const internal::VariadicDynCastAllOfMatcher< Decl, AccessSpecDecl > accessSpecDecl
Matches C++ access specifier declarations.
const AstTypeMatcher< TemplateTypeParmType > templateTypeParmType
Matches template type parameter types.
StringLiteral - This represents a string literal expression, e.g.
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
internal::Matcher< TypeLoc > TypeLocMatcher
A reference to a declared variable, function, enum, etc.
AST_MATCHER_P_OVERLOAD(QualType, ignoringParens, internal::Matcher< QualType >, InnerMatcher, 0)
Matches types that match InnerMatcher after any parens are stripped.
Represents a type template specialization; the template must be a class template, a type alias templa...
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundStmt > compoundStmt
Matches compound statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, StringLiteral > stringLiteral
Matches string literals (also matches wide string literals).
const internal::VariadicDynCastAllOfMatcher< Decl, BlockDecl > blockDecl
Matches block declarations.
AST_TYPELOC_TRAVERSE_MATCHER_DECL(hasElementType, getElement, AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType, ComplexType))
Matches arrays and C99 complex types that have a specific element type.
const AstTypeMatcher< ConstantArrayType > constantArrayType
Matches C arrays with a specified constant size.
bool matches(const til::SExpr *E1, const til::SExpr *E2)
bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType)
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDestructorDecl > cxxDestructorDecl
Matches explicit C++ destructor declarations.
This represents a decl that may have a name.
A boolean literal, per ([C++ lex.bool] Boolean literals).
Represents a C array with a specified size that is not an integer-constant-expression.
Automatic storage duration (most local variables).
const AstTypeMatcher< ReferenceType > referenceType
Matches both lvalue and rvalue reference types.
attr::Kind getKind() const
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCMessageExpr > objcMessageExpr
Matches ObjectiveC Message invocation expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, DeclaratorDecl > declaratorDecl
Matches declarator declarations (field, variable, function and non-type template parameter declaratio...
Matcher< ObjCMessageExpr > hasAnySelectorFunc(ArrayRef< const StringRef *> NameRefs)
Represents Objective-C's @autoreleasepool Statement.
Represents the canonical version of C arrays with a specified constant size.
This class handles loading and caching of source files into memory.
const AstTypeMatcher< LValueReferenceType > lValueReferenceType
Matches lvalue reference types.
Attr - This represents one attribute.
const internal::VariadicDynCastAllOfMatcher< Stmt, WhileStmt > whileStmt
Matches while statements.
const AstTypeMatcher< EnumType > enumType
Matches enum types.
Represents a shadow declaration introduced into a scope by a (resolved) using declaration.
internal::Matcher< Decl > DeclarationMatcher
Types of matchers for the top-level classes in the AST class hierarchy.
const AstTypeMatcher< BlockPointerType > blockPointerType
Matches block pointer types, i.e.
Defines the LambdaCapture class.
static bool isExternC(const NamedDecl *ND)
AST_MATCHER_P2(InitListExpr, hasInit, unsigned, N, ast_matchers::internal::Matcher< Expr >, InnerMatcher)
Matches the n'th item of an initializer list expression.