1242 if (
T->getBaseType().getTypePtr() !=
T)
1243 TRY_TO(TraverseType(
T->getBaseType()));
1244 for (
auto typeArg :
T->getTypeArgsAsWritten()) {
1245 TRY_TO(TraverseType(typeArg));
1250 {
TRY_TO(TraverseType(
T->getPointeeType())); })
1258 {
TRY_TO(TraverseStmt(
T->getNumBitsExpr())); })
1272 template <
typename Derived> \
1273 bool RecursiveASTVisitor<Derived>::Traverse##
TYPE##Loc( \
1274 TYPE##Loc TL,
bool TraverseQualifier) { \
1275 if (!getDerived().shouldTraversePostOrder()) { \
1276 TRY_TO(WalkUpFrom##
TYPE##Loc(TL)); \
1277 if (getDerived().shouldWalkTypesOfTypeLocs()) \
1278 TRY_TO(WalkUpFrom##
TYPE(
const_cast<TYPE *
>(TL.getTypePtr()))); \
1283 if (getDerived().shouldTraversePostOrder()) { \
1284 TRY_TO(WalkUpFrom##
TYPE##Loc(TL)); \
1285 if (getDerived().shouldWalkTypesOfTypeLocs()) \
1286 TRY_TO(WalkUpFrom##
TYPE(
const_cast<TYPE *
>(TL.getTypePtr()))); \
1291template <
typename Derived>
1294 assert(TraverseQualifier &&
1295 "Qualifiers should never occur within NestedNameSpecifiers");
1311 return TraverseTypeLoc(TL.getUnqualifiedLoc());
1318 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1322 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1325 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1328 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1331 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1336 if (NestedNameSpecifierLoc QL = TL.getQualifierLoc())
1339 TRY_TO(TraverseNestedNameSpecifier(TL.getTypePtr()->getQualifier()));
1344 {
TRY_TO(TraverseTypeLoc(TL.getOriginalLoc())); })
1347 {
TRY_TO(TraverseTypeLoc(TL.getOriginalLoc())); })
1349template <typename Derived>
1350bool RecursiveASTVisitor<Derived>::TraverseArrayTypeLocHelper(
ArrayTypeLoc TL) {
1352 TRY_TO(TraverseStmt(TL.getSizeExpr()));
1357 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1358 TRY_TO(TraverseArrayTypeLocHelper(TL));
1362 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1367 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1368 TRY_TO(TraverseArrayTypeLocHelper(TL));
1372 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1373 TRY_TO(TraverseArrayTypeLocHelper(TL));
1377 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1378 TRY_TO(TraverseArrayTypeLocHelper(TL));
1382 TRY_TO(TraverseStmt(TL.getTypePtr()->getAddrSpaceExpr()));
1383 TRY_TO(TraverseType(TL.getTypePtr()->getPointeeType()));
1389 if (TL.getTypePtr()->getSizeExpr())
1390 TRY_TO(TraverseStmt(TL.getTypePtr()->getSizeExpr()));
1391 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1396 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1400 if (TL.getTypePtr()->getSizeExpr())
1401 TRY_TO(TraverseStmt(TL.getTypePtr()->getSizeExpr()));
1402 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1408 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1412 TRY_TO(TraverseStmt(TL.getAttrRowOperand()));
1413 TRY_TO(TraverseStmt(TL.getAttrColumnOperand()));
1414 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1418 TRY_TO(TraverseStmt(TL.getAttrRowOperand()));
1419 TRY_TO(TraverseStmt(TL.getAttrColumnOperand()));
1420 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1424 {
TRY_TO(TraverseTypeLoc(TL.getReturnLoc())); })
1428 TRY_TO(TraverseTypeLoc(TL.getReturnLoc()));
1432 for (
unsigned I = 0, E = TL.getNumParams(); I != E; ++I) {
1433 if (TL.getParam(I)) {
1434 TRY_TO(TraverseDecl(TL.getParam(I)));
1435 }
else if (I < T->getNumParams()) {
1436 TRY_TO(TraverseType(
T->getParamType(I)));
1440 for (
const auto &E : T->exceptions()) {
1444 if (
Expr *NE =
T->getNoexceptExpr())
1445 TRY_TO(TraverseStmt(NE));
1450 TraverseQualifier && QualifierLoc)
1454 if (NestedNameSpecifierLoc QualifierLoc = TL.getQualifierLoc();
1455 TraverseQualifier && QualifierLoc)
1460 TraverseQualifier && QualifierLoc)
1465 {
TRY_TO(TraverseStmt(TL.getUnderlyingExpr())); })
1468 TRY_TO(TraverseTypeLoc(TL.getUnmodifiedTInfo()->getTypeLoc()));
1473 TRY_TO(TraverseStmt(TL.getTypePtr()->getUnderlyingExpr()));
1477 TRY_TO(TraverseType(TL.getPattern()));
1478 TRY_TO(TraverseStmt(TL.getTypePtr()->getIndexExpr()));
1482 TRY_TO(TraverseTypeLoc(TL.getUnderlyingTInfo()->getTypeLoc()));
1486 TRY_TO(TraverseType(TL.getTypePtr()->getDeducedType()));
1487 if (TL.isConstrained()) {
1488 TRY_TO(TraverseConceptReference(TL.getConceptReference()));
1494 TRY_TO(TraverseType(TL.getTypePtr()->getReplacementType()));
1497template <typename Derived>
1498bool RecursiveASTVisitor<Derived>::TraverseSubstPackTypeLocHelper(
1500 TRY_TO(TraverseTemplateArgument(TL.getTypePtr()->getArgumentPack()));
1504template <
typename Derived>
1505bool RecursiveASTVisitor<Derived>::TraverseSubstPackTypeHelper(
1507 TRY_TO(TraverseTemplateArgument(
T->getArgumentPack()));
1512 {
TRY_TO(TraverseSubstPackTypeLocHelper(TL)); })
1515 {
TRY_TO(TraverseSubstPackTypeLocHelper(TL)); })
1520 {
TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
1523 {
TRY_TO(TraverseTypeLoc(TL.getModifiedLoc())); })
1526 {
TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
1529 {
TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
1532 {
TRY_TO(TraverseTypeLoc(TL.getWrappedLoc())); })
1535 {
TRY_TO(TraverseTypeLoc(TL.getWrappedLoc())); })
1538 {
TRY_TO(TraverseTypeLoc(TL.getWrappedLoc())); })
1541 {
TRY_TO(TraverseType(TL.getType())); })
1543template <typename Derived>
1544bool RecursiveASTVisitor<Derived>::TraverseTagTypeLoc(TagTypeLoc TL,
1545 bool TraverseQualifier) {
1546 if (NestedNameSpecifierLoc QualifierLoc = TL.getQualifierLoc();
1547 TraverseQualifier && QualifierLoc)
1553 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1555 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1557 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1560 if (TraverseQualifier)
1565 if (TraverseQualifier)
1569 TRY_TO(TraverseTemplateName(
1570 TemplateName(TL.getTypePtr()->getTemplateName().getAsTemplateDecl(
1573 for (
unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
1574 TRY_TO(TraverseTemplateArgumentLoc(TL.getArgLoc(I)));
1579 if (TraverseQualifier)
1582 const auto *T = TL.getTypePtr();
1585 TraverseTemplateName(
TemplateName(
T->getTemplateName().getAsTemplateDecl(
1592 {
TRY_TO(TraverseTypeLoc(TL.getPatternLoc())); })
1595 for (
unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
1596 ObjCProtocolLoc ProtocolLoc(TL.getProtocol(I), TL.getProtocolLoc(I));
1597 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1606 if (TL.getTypePtr()->getBaseType().getTypePtr() != TL.getTypePtr())
1607 TRY_TO(TraverseTypeLoc(TL.getBaseLoc()));
1608 for (
unsigned i = 0, n = TL.getNumTypeArgs(); i != n; ++i)
1609 TRY_TO(TraverseTypeLoc(TL.getTypeArgTInfo(i)->getTypeLoc()));
1610 for (
unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
1612 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1617 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1625 TRY_TO(TraverseStmt(TL.getTypePtr()->getNumBitsExpr()));
1639template <typename Derived>
1641 const Decl *Child) {
1647 if (
const CXXRecordDecl* Cls = dyn_cast<CXXRecordDecl>(Child))
1648 return Cls->isLambda();
1652template <
typename Derived>
1653bool RecursiveASTVisitor<Derived>::TraverseDeclContextHelper(
DeclContext *DC) {
1657 for (
auto *Child : DC->decls()) {
1658 if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
1659 TRY_TO(TraverseDecl(Child));
1666#define DEF_TRAVERSE_DECL(DECL, CODE) \
1667 template <typename Derived> \
1668 bool RecursiveASTVisitor<Derived>::Traverse##DECL(DECL *D) { \
1669 bool ShouldVisitChildren = true; \
1670 bool ReturnValue = true; \
1671 if (!getDerived().shouldTraversePostOrder()) \
1672 TRY_TO(WalkUpFrom##DECL(D)); \
1674 if (ReturnValue && ShouldVisitChildren) \
1675 TRY_TO(TraverseDeclContextHelper(dyn_cast<DeclContext>(D))); \
1676 if (ReturnValue) { \
1678 for (auto *I : D->attrs()) \
1679 TRY_TO(getDerived().TraverseAttr(I)); \
1681 if (ReturnValue && getDerived().shouldTraversePostOrder()) \
1682 TRY_TO(WalkUpFrom##DECL(D)); \
1683 return ReturnValue; \
1690 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
1691 TRY_TO(TraverseStmt(D->getBody()));
1692 for (
const auto &I : D->captures()) {
1693 if (I.hasCopyExpr()) {
1694 TRY_TO(TraverseStmt(I.getCopyExpr()));
1697 ShouldVisitChildren =
false;
1701 TRY_TO(TraverseStmt(D->getBody()));
1702 ShouldVisitChildren =
false;
1706 TRY_TO(TraverseStmt(D->getBody()));
1707 ShouldVisitChildren =
false;
1717 TRY_TO(TraverseStmt(D->getTemporaryExpr()));
1721 {
TRY_TO(TraverseStmt(D->getAsmStringExpr())); })
1729 if (D->getFriendType()) {
1730 TRY_TO(TraverseTypeLoc(D->getFriendType()->getTypeLoc()));
1733 if (
auto *TT = D->getFriendType()->getType()->getAs<TagType>();
1734 TT && TT->isTagOwned())
1735 TRY_TO(TraverseDecl(TT->getDecl()));
1737 TRY_TO(TraverseDecl(D->getFriendDecl()));
1742 if (D->getFriendType())
1743 TRY_TO(TraverseTypeLoc(D->getFriendType()->getTypeLoc()));
1745 TRY_TO(TraverseDecl(D->getFriendDecl()));
1746 for (
unsigned I = 0, E = D->getNumTemplateParameters(); I < E; ++I) {
1749 ITPL != ETPL; ++ITPL) {
1750 TRY_TO(TraverseDecl(*ITPL));
1763 TRY_TO(TraverseStmt(D->getAssertExpr()));
1764 TRY_TO(TraverseStmt(D->getMessage()));
1770 if (D->getQualifierLoc())
1773 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
1774 if (
auto NumArgs = D->getNumTemplateArgs())
1775 for (
unsigned I = 0; I != *NumArgs; ++I)
1776 TRY_TO(TraverseTemplateArgumentLoc(D->getTemplateArg(I)));
1786 auto Scope = D->getASTContext().getTraversalScope();
1787 bool HasLimitedScope =
1789 if (HasLimitedScope) {
1790 ShouldVisitChildren =
false;
1791 for (
auto *Child :
Scope) {
1792 if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
1793 TRY_TO(TraverseDecl(Child));
1809 ShouldVisitChildren =
false;
1827 for (
auto typeParam : *typeParamList) {
1828 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1831 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1833 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1845 for (
auto typeParam : *typeParamList) {
1846 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1851 TRY_TO(TraverseTypeLoc(superTInfo->getTypeLoc()));
1853 if (D->isThisDeclarationADefinition()) {
1854 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1856 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1862 if (D->isThisDeclarationADefinition()) {
1863 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1865 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1871 if (D->getReturnTypeSourceInfo()) {
1872 TRY_TO(TraverseTypeLoc(D->getReturnTypeSourceInfo()->getTypeLoc()));
1877 if (D->isThisDeclarationADefinition()) {
1878 TRY_TO(TraverseStmt(D->getBody()));
1880 ShouldVisitChildren =
false;
1884 if (D->hasExplicitBound()) {
1885 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1893 if (D->getTypeSourceInfo())
1894 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1896 TRY_TO(TraverseType(D->getType()));
1897 ShouldVisitChildren =
false;
1902 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
1906 {
TRY_TO(TraverseTypeLoc(D->getEnumTypeLoc())); })
1919 if (D->getInstantiations() &&
1920 getDerived().shouldVisitTemplateInstantiations())
1921 TRY_TO(TraverseStmt(D->getInstantiations()));
1923 TRY_TO(TraverseStmt(D->getExpansionPattern()));
1927 for (
auto *I : D->varlist()) {
1933 for (
auto *I : D->varlist()) {
1939 for (
auto *
C : D->clauselists()) {
1945 TRY_TO(TraverseStmt(D->getCombiner()));
1948 TRY_TO(TraverseType(D->getType()));
1953 for (
auto *
C : D->clauselists())
1955 TRY_TO(TraverseType(D->getType()));
1962 for (
auto *I : D->varlist())
1964 for (
auto *
C : D->clauselists())
1969 {
TRY_TO(VisitOpenACCClauseList(D->clauses())); })
1972 TRY_TO(TraverseStmt(D->getFunctionReference()));
1973 TRY_TO(VisitOpenACCClauseList(D->clauses()));
1977template <typename Derived>
1978bool RecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
1984 if (
Expr *RequiresClause = TPL->getRequiresClause()) {
1985 TRY_TO(TraverseStmt(RequiresClause));
1991template <
typename Derived>
1992template <
typename T>
1993bool RecursiveASTVisitor<Derived>::TraverseDeclTemplateParameterLists(
T *D) {
1995 TraverseTemplateParameterListHelper(TPL);
1999template <
typename Derived>
2002 for (
auto *SD : D->specializations()) {
2003 for (
auto *RD : SD->redecls()) {
2010 TRY_TO(TraverseDecl(RD));
2027template <
typename Derived>
2030 for (
auto *SD : D->specializations()) {
2031 for (
auto *RD : SD->redecls()) {
2036 TRY_TO(TraverseDecl(RD));
2052template <
typename Derived>
2055 for (
auto *FD : D->specializations()) {
2056 for (
auto *RD : FD->redecls()) {
2057 switch (RD->getTemplateSpecializationKind()) {
2061 TRY_TO(TraverseDecl(RD));
2070 TRY_TO(TraverseDecl(RD));
2084#define DEF_TRAVERSE_TMPL_DECL(TMPLDECLKIND) \
2085 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateDecl, { \
2086 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2087 TRY_TO(TraverseDecl(D->getTemplatedDecl())); \
2095 if (getDerived().shouldVisitTemplateInstantiations() && \
2096 D == D->getCanonicalDecl()) \
2097 TRY_TO(TraverseTemplateInstantiations(D)); \
2111 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2112 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2113 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2114 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2118 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2121template <typename Derived>
2122bool RecursiveASTVisitor<Derived>::TraverseTemplateTypeParamDeclConstraints(
2124 if (
const auto *TC = D->getTypeConstraint())
2125 TRY_TO(TraverseTypeConstraint(TC));
2131 if (D->getTypeForDecl())
2133 TRY_TO(TraverseTemplateTypeParamDeclConstraints(D));
2134 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2135 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2139 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2146 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2153 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2154 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2158 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2159 TRY_TO(TraverseStmt(D->getConstraintExpr()));
2174 TRY_TO(TraverseDeclTemplateParameterLists(D));
2177 if (
auto *TSI = D->getIntegerTypeSourceInfo())
2178 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2184template <typename Derived>
2185bool RecursiveASTVisitor<Derived>::TraverseRecordHelper(
RecordDecl *D) {
2189 TRY_TO(TraverseDeclTemplateParameterLists(D));
2194template <
typename Derived>
2197 TRY_TO(TraverseTypeLoc(
Base.getTypeSourceInfo()->getTypeLoc()));
2201template <
typename Derived>
2202bool RecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(
CXXRecordDecl *D) {
2203 if (!TraverseRecordHelper(D))
2205 if (D->isCompleteDefinition()) {
2206 for (
const auto &I : D->bases()) {
2207 TRY_TO(TraverseCXXBaseSpecifier(I));
2219template <typename Derived>
2220bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLocsHelper(
2222 for (
unsigned I = 0; I < Count; ++I) {
2223 TRY_TO(TraverseTemplateArgumentLoc(TAL[I]));
2228#define DEF_TRAVERSE_TMPL_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2229 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateSpecializationDecl, { \
2239 if (D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) { \
2240 const auto *ArgsWritten = D->getTemplateArgsAsWritten(); \
2241 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2242 ArgsWritten->getTemplateArgs(), ArgsWritten->NumTemplateArgs)); \
2243 } else if (!getDerived().shouldVisitTemplateInstantiations()) { \
2252 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2258#define DEF_TRAVERSE_TMPL_PART_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2259 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplatePartialSpecializationDecl, { \
2261 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2263 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2264 D->getTemplateArgsAsWritten()->getTemplateArgs(), \
2265 D->getTemplateArgsAsWritten()->NumTemplateArgs)); \
2270 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2284 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2289template <typename Derived>
2290bool RecursiveASTVisitor<Derived>::TraverseDeclaratorHelper(
DeclaratorDecl *D) {
2291 TRY_TO(TraverseDeclTemplateParameterLists(D));
2293 if (D->getTypeSourceInfo())
2294 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2296 TRY_TO(TraverseType(D->getType()));
2301 TRY_TO(TraverseVarHelper(D));
2302 for (
auto *Binding : D->bindings()) {
2303 TRY_TO(TraverseDecl(Binding));
2308 if (getDerived().shouldVisitImplicitCode()) {
2309 TRY_TO(TraverseStmt(D->getBinding()));
2310 if (
const auto HoldingVar = D->getHoldingVar())
2311 TRY_TO(TraverseDecl(HoldingVar));
2323 TRY_TO(TraverseDeclaratorHelper(D));
2324 if (D->isBitField())
2325 TRY_TO(TraverseStmt(D->getBitWidth()));
2326 if (D->hasInClassInitializer())
2327 TRY_TO(TraverseStmt(D->getInClassInitializer()));
2331 TRY_TO(TraverseDeclaratorHelper(D));
2332 if (D->isBitField())
2333 TRY_TO(TraverseStmt(D->getBitWidth()));
2338 TRY_TO(TraverseDeclaratorHelper(D));
2339 if (D->isBitField())
2340 TRY_TO(TraverseStmt(D->getBitWidth()));
2344template <typename Derived>
2345bool RecursiveASTVisitor<Derived>::TraverseFunctionHelper(
FunctionDecl *D) {
2346 TRY_TO(TraverseDeclTemplateParameterLists(D));
2348 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2356 D->getTemplateSpecializationInfo()) {
2362 FTSI->TemplateArgumentsAsWritten) {
2363 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2364 TALI->NumTemplateArgs));
2368 D->getDependentSpecializationInfo()) {
2370 DFSI->TemplateArgumentsAsWritten) {
2371 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2372 TALI->NumTemplateArgs));
2381 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2382 }
else if (getDerived().shouldVisitImplicitCode()) {
2394 D->getTrailingRequiresClause()) {
2396 const_cast<Expr *
>(TrailingRequiresClause.ConstraintExpr)));
2401 for (
auto *I : Ctor->inits()) {
2402 if (I->isWritten() || getDerived().shouldVisitImplicitCode())
2403 TRY_TO(TraverseConstructorInitializer(I));
2408 D->isThisDeclarationADefinition() &&
2411 (!D->isDefaulted() || getDerived().shouldVisitImplicitCode());
2413 if (
const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
2415 if (RD->isLambda() &&
2417 VisitBody = VisitBody && getDerived().shouldVisitLambdaBody();
2423 TRY_TO(TraverseStmt(D->getBody()));
2426 for (
auto *Child : D->decls()) {
2428 TRY_TO(TraverseDecl(Child));
2437 ShouldVisitChildren =
false;
2444 ShouldVisitChildren =
false;
2451 ShouldVisitChildren =
false;
2458 ShouldVisitChildren =
false;
2467 ShouldVisitChildren =
false;
2474 ShouldVisitChildren =
false;
2478template <typename Derived>
2479bool RecursiveASTVisitor<Derived>::TraverseVarHelper(
VarDecl *D) {
2480 TRY_TO(TraverseDeclaratorHelper(D));
2483 (!D->isCXXForRangeDecl() || getDerived().shouldVisitImplicitCode()))
2484 TRY_TO(TraverseStmt(D->getInit()));
2494 TRY_TO(TraverseDeclaratorHelper(D));
2495 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2496 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2500 TRY_TO(TraverseVarHelper(D));
2502 if (D->hasDefaultArg() && D->hasUninstantiatedDefaultArg() &&
2503 !D->hasUnparsedDefaultArg())
2504 TRY_TO(TraverseStmt(D->getUninstantiatedDefaultArg()));
2506 if (D->hasDefaultArg() && !D->hasUninstantiatedDefaultArg() &&
2507 !D->hasUnparsedDefaultArg())
2508 TRY_TO(TraverseStmt(D->getDefaultArg()));
2514 TRY_TO(TraverseTemplateArguments(D->getTemplateArguments()));
2530 template <
typename Derived> \
2532 STMT *S, DataRecursionQueue *Queue) { \
2533 bool ShouldVisitChildren =
true; \
2535 if (!getDerived().shouldTraversePostOrder()) \
2536 TRY_TO(WalkUpFrom##
STMT(S)); \
2538 if (ShouldVisitChildren) { \
2539 for (
Stmt * SubStmt : getDerived().getStmtChildren(S)) { \
2540 TRY_TO_TRAVERSE_OR_ENQUEUE_STMT(SubStmt); \
2547 if (!Queue && ReturnValue && getDerived().shouldTraversePostOrder()) { \
2548 TRY_TO(WalkUpFrom##
STMT(S)); \
2555 for (
unsigned I = 0, E = S->getNumInputs(); I < E; ++I) {
2558 for (
unsigned I = 0, E = S->getNumOutputs(); I < E; ++I) {
2561 for (
unsigned I = 0, E = S->getNumClobbers(); I < E; ++I) {
2574 TRY_TO(TraverseDecl(S->getExceptionDecl()));
2579 for (
auto *I : S->decls()) {
2587 ShouldVisitChildren =
false;
2616 if (!getDerived().shouldVisitImplicitCode()) {
2623 ShouldVisitChildren =
false;
2629 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2640 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2641 if (S->hasExplicitTemplateArgs()) {
2642 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2643 S->getNumTemplateArgs()));
2649 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2650 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2651 S->getNumTemplateArgs()));
2656 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2657 if (S->hasExplicitTemplateArgs()) {
2658 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2659 S->getNumTemplateArgs()));
2665 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2666 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2667 S->getNumTemplateArgs()));
2677 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2681 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2685 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2689 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2693 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2697 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2701 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2705 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2708template <typename Derived>
2714 if (!getDerived().shouldTraversePostOrder())
2715 TRY_TO(WalkUpFromInitListExpr(S));
2722 if (!Queue && getDerived().shouldTraversePostOrder())
2723 TRY_TO(WalkUpFromInitListExpr(S));
2728template <
typename Derived>
2734template <
typename Derived>
2737 if (!getDerived().shouldTraversePostOrder())
2738 TRY_TO(VisitConceptReference(CR));
2740 TRY_TO(TraverseDeclarationNameInfo(CR->getConceptNameInfo()));
2741 if (CR->hasExplicitTemplateArgs())
2742 TRY_TO(TraverseTemplateArgumentLocsHelper(
2743 CR->getTemplateArgsAsWritten()->getTemplateArgs(),
2744 CR->getTemplateArgsAsWritten()->NumTemplateArgs));
2745 if (getDerived().shouldTraversePostOrder())
2746 TRY_TO(VisitConceptReference(CR));
2750template <
typename Derived>
2753 TRY_TO(VisitOffsetOfNode(Node));
2765template <
typename Derived>
2768 if (S->isSemanticForm() && S->isSyntacticForm()) {
2770 TRY_TO(TraverseSynOrSemInitListExpr(S, Queue));
2773 TRY_TO(TraverseSynOrSemInitListExpr(
2774 S->isSemanticForm() ? S->getSyntacticForm() : S, Queue));
2775 if (getDerived().shouldVisitImplicitCode()) {
2778 TRY_TO(TraverseSynOrSemInitListExpr(
2779 S->isSemanticForm() ? S : S->getSemanticForm(), Queue));
2788 if (S->isExprPredicate())
2789 TRY_TO(TraverseStmt(S->getControllingExpr()));
2791 TRY_TO(TraverseTypeLoc(S->getControllingType()->getTypeLoc()));
2795 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2798 ShouldVisitChildren =
false;
2806 e = S->semantics_end();
2810 sub = OVE->getSourceExpr();
2813 ShouldVisitChildren =
false;
2819 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2824 TRY_TO(TraverseTypeLoc(S->getAllocatedTypeSourceInfo()->getTypeLoc()));
2828 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2832 for (
unsigned I = 0, E = S->getNumComponents(); I != E; ++I)
2833 TRY_TO(TraverseOffsetOfNode(&S->getComponent(I)));
2839 if (S->isArgumentType())
2840 TRY_TO(TraverseTypeLoc(S->getArgumentTypeInfo()->getTypeLoc()));
2846 if (S->isTypeOperand())
2847 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2859 if (S->isTypeOperand())
2860 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2864 for (
unsigned I = 0, N = S->getNumArgs(); I != N; ++I)
2865 TRY_TO(TraverseTypeLoc(S->getArg(I)->getTypeLoc()));
2869 TRY_TO(TraverseTypeLoc(S->getQueriedTypeSourceInfo()->getTypeLoc()));
2877 TRY_TO(TraverseTypeLoc(S->getWrittenTypeInfo()->getTypeLoc()));
2882 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2888 for (
unsigned I = 0, N = S->capture_size(); I != N; ++I) {
2890 if (
C->isExplicit() || getDerived().shouldVisitImplicitCode()) {
2891 TRY_TO(TraverseLambdaCapture(S,
C, S->capture_init_begin()[I]));
2895 if (getDerived().shouldVisitImplicitCode()) {
2897 TRY_TO(TraverseDecl(S->getLambdaClass()));
2900 TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
2903 TRY_TO(TraverseTemplateParameterListHelper(S->getTemplateParameterList()));
2904 if (S->hasExplicitParameters()) {
2906 for (
unsigned I = 0, N = Proto.getNumParams(); I != N; ++I)
2907 TRY_TO(TraverseDecl(Proto.getParam(I)));
2910 auto *
T = Proto.getTypePtr();
2911 for (
const auto &E :
T->exceptions())
2914 if (
Expr *NE =
T->getNoexceptExpr())
2917 if (S->hasExplicitResultType())
2918 TRY_TO(TraverseTypeLoc(Proto.getReturnLoc()));
2920 const_cast<Expr *
>(S->getTrailingRequiresClause().ConstraintExpr));
2924 ShouldVisitChildren =
false;
2929 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2951 TRY_TO(TraverseDecl(S->getBlockDecl()));
2957 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2963 if (getDerived().shouldVisitImplicitCode())
2964 TRY_TO(TraverseStmt(S->getExpr()));
2968 if (getDerived().shouldVisitImplicitCode())
2969 TRY_TO(TraverseStmt(S->getExpr()));
2981 TRY_TO(TraverseTypeLoc(ScopeInfo->getTypeLoc()));
2982 if (
TypeSourceInfo *DestroyedTypeInfo = S->getDestroyedTypeInfo())
2983 TRY_TO(TraverseTypeLoc(DestroyedTypeInfo->getTypeLoc()));
3007 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
3015 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
3019 if (S->isClassReceiver()) {
3021 QualType Type = IDecl->getASTContext().getObjCInterfaceType(IDecl);
3023 Data.NameLoc = S->getReceiverLocation();
3034 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
3041 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
3044 if (getDerived().shouldVisitImplicitCode()) {
3045 TRY_TO(TraverseStmt(S->getOriginalStmt()));
3046 TRY_TO(TraverseStmt(S->getKernelLaunchIdExpr()));
3047 ShouldVisitChildren =
false;
3064 if (S->hasExplicitTemplateArgs()) {
3065 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3066 S->getNumTemplateArgs()));
3072 if (S->hasExplicitTemplateArgs()) {
3073 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3074 S->getNumTemplateArgs()));
3085 if (getDerived().shouldVisitImplicitCode()) {
3086 TRY_TO(TraverseStmt(S->getOriginalStmt()));
3087 TRY_TO(TraverseStmt(S->getKernelLaunchStmt()));
3088 TRY_TO(TraverseDecl(S->getOutlinedFunctionDecl()));
3089 ShouldVisitChildren =
false;
3095 if (!getDerived().shouldVisitImplicitCode()) {
3097 S->getDecomposedForm();
3098 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.LHS)));
3099 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.RHS)));
3100 ShouldVisitChildren =
false;
3126 if (S->getLifetimeExtendedTemporaryDecl()) {
3127 TRY_TO(TraverseLifetimeExtendedTemporaryDecl(
3128 S->getLifetimeExtendedTemporaryDecl()));
3129 ShouldVisitChildren =
false;
3136 if (!getDerived().shouldVisitImplicitCode()) {
3138 ShouldVisitChildren =
false;
3142 if (!getDerived().shouldVisitImplicitCode()) {
3144 ShouldVisitChildren =
false;
3148 if (!getDerived().shouldVisitImplicitCode()) {
3150 ShouldVisitChildren =
false;
3154 if (!getDerived().shouldVisitImplicitCode()) {
3156 ShouldVisitChildren =
false;
3160 if (!getDerived().shouldVisitImplicitCode()) {
3162 ShouldVisitChildren =
false;
3167 TRY_TO(TraverseConceptReference(S->getConceptReference()));
3171 TRY_TO(TraverseDecl(S->getBody()));
3173 TRY_TO(TraverseDecl(Parm));
3175 TRY_TO(TraverseConceptRequirement(Req));
3198template <typename Derived>
3199bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
3200 OMPExecutableDirective *S) {
3201 for (
auto *
C : S->clauses()) {
3208 if (!getDerived().shouldVisitImplicitCode()) {
3210 TRY_TO(TraverseStmt(S->getLoopStmt()));
3211 ShouldVisitChildren =
false;
3215template <typename Derived>
3217RecursiveASTVisitor<Derived>::TraverseOMPLoopDirective(OMPLoopDirective *S) {
3218 return TraverseOMPExecutableDirective(S);
3222 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3225 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3228 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3231 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3234 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3237 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3240 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3243 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3246 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3249 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3252 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3255 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3258 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3261 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3264 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3267 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3270 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3273 TRY_TO(TraverseDeclarationNameInfo(S->getDirectiveName()));
3274 TRY_TO(TraverseOMPExecutableDirective(S));
3278 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3281 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3284 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3287 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3290 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3293 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3296 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3299 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3302 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3305 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3308 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3311 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3314 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3317 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3320 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3323 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3326 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3329 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3332 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3335 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3338 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3341 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3344 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3347 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3350 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3353 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3356 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3359 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3362 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3365 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3368 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3371 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3374 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3377 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3380 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3383 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3386 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3389 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3392 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3395 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3398 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3401 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3404 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3407 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3410 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3413 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3416 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3419 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3422 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3425 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3428 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3431 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3434 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3437 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3440 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3443 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3446 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3449 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3452 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3455 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3458template <typename Derived>
3459bool RecursiveASTVisitor<Derived>::TraverseOMPClause(
OMPClause *
C) {
3462 switch (
C->getClauseKind()) {
3463#define GEN_CLANG_CLAUSE_CLASS
3464#define CLAUSE_CLASS(Enum, Str, Class) \
3465 case llvm::omp::Clause::Enum: \
3466 TRY_TO(Visit##Class(static_cast<Class *>(C))); \
3468#define CLAUSE_NO_CLASS(Enum, Str) \
3469 case llvm::omp::Clause::Enum: \
3471#include "llvm/Frontend/OpenMP/OMP.inc"
3476template <
typename Derived>
3477bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPreInit(
3479 TRY_TO(TraverseStmt(Node->getPreInitStmt()));
3483template <
typename Derived>
3484bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPostUpdate(
3486 TRY_TO(VisitOMPClauseWithPreInit(Node));
3487 TRY_TO(TraverseStmt(Node->getPostUpdateExpr()));
3491template <
typename Derived>
3494 TRY_TO(TraverseStmt(
C->getAllocator()));
3498template <
typename Derived>
3500 TRY_TO(TraverseStmt(
C->getAllocator()));
3501 TRY_TO(VisitOMPClauseList(
C));
3505template <
typename Derived>
3507 TRY_TO(VisitOMPClauseWithPreInit(
C));
3508 TRY_TO(TraverseStmt(
C->getCondition()));
3512template <
typename Derived>
3514 TRY_TO(VisitOMPClauseWithPreInit(
C));
3515 TRY_TO(TraverseStmt(
C->getCondition()));
3519template <
typename Derived>
3522 TRY_TO(VisitOMPClauseWithPreInit(
C));
3523 TRY_TO(TraverseStmt(
C->getNumThreads()));
3527template <
typename Derived>
3529 TRY_TO(TraverseStmt(
C->getAlignment()));
3533template <
typename Derived>
3535 TRY_TO(TraverseStmt(
C->getSafelen()));
3539template <
typename Derived>
3541 TRY_TO(TraverseStmt(
C->getSimdlen()));
3545template <
typename Derived>
3547 for (
Expr *E :
C->getSizesRefs())
3552template <
typename Derived>
3554 for (
Expr *E :
C->getCountsRefs())
3559template <
typename Derived>
3562 for (
Expr *E :
C->getArgsRefs())
3567template <
typename Derived>
3572template <
typename Derived>
3575 TRY_TO(TraverseStmt(
C->getFirst()));
3576 TRY_TO(TraverseStmt(
C->getCount()));
3580template <
typename Derived>
3582 TRY_TO(TraverseStmt(
C->getFactor()));
3586template <
typename Derived>
3589 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3593template <
typename Derived>
3598template <
typename Derived>
3604template <
typename Derived>
3606 OMPTransparentClause *
C) {
3607 TRY_TO(TraverseStmt(
C->getImpexType()));
3611template <
typename Derived>
3616template <
typename Derived>
3618 OMPUnifiedAddressClause *) {
3622template <
typename Derived>
3624 OMPUnifiedSharedMemoryClause *) {
3628template <
typename Derived>
3630 OMPReverseOffloadClause *) {
3634template <
typename Derived>
3636 OMPDynamicAllocatorsClause *) {
3640template <
typename Derived>
3642 OMPAtomicDefaultMemOrderClause *) {
3646template <
typename Derived>
3651template <
typename Derived>
3656template <
typename Derived>
3661template <
typename Derived>
3663 TRY_TO(TraverseStmt(
C->getMessageString()));
3667template <
typename Derived>
3670 TRY_TO(VisitOMPClauseWithPreInit(
C));
3671 TRY_TO(TraverseStmt(
C->getChunkSize()));
3675template <
typename Derived>
3677 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3681template <
typename Derived>
3683 TRY_TO(TraverseStmt(
C->getCondition()));
3687template <
typename Derived>
3692template <
typename Derived>
3698template <
typename Derived>
3703template <
typename Derived>
3708template <
typename Derived>
3713template <
typename Derived>
3718template <
typename Derived>
3723template <
typename Derived>
3728template <
typename Derived>
3733template <
typename Derived>
3738template <
typename Derived>
3743template <
typename Derived>
3748template <
typename Derived>
3753template <
typename Derived>
3758template <
typename Derived>
3760 OMPNoOpenMPRoutinesClause *) {
3764template <
typename Derived>
3766 OMPNoOpenMPConstructsClause *) {
3770template <
typename Derived>
3772 OMPNoParallelismClause *) {
3776template <
typename Derived>
3781template <
typename Derived>
3786template <
typename Derived>
3791template <
typename Derived>
3796template <
typename Derived>
3801template <
typename Derived>
3806template <
typename Derived>
3811template <
typename Derived>
3813 TRY_TO(VisitOMPClauseList(
C));
3816 for (
Expr *A :
C->attrs())
3821template <
typename Derived>
3823 TRY_TO(TraverseStmt(
C->getInteropVar()));
3827template <
typename Derived>
3829 TRY_TO(TraverseStmt(
C->getInteropVar()));
3833template <
typename Derived>
3835 OMPNovariantsClause *
C) {
3836 TRY_TO(VisitOMPClauseWithPreInit(
C));
3837 TRY_TO(TraverseStmt(
C->getCondition()));
3841template <
typename Derived>
3843 OMPNocontextClause *
C) {
3844 TRY_TO(VisitOMPClauseWithPreInit(
C));
3845 TRY_TO(TraverseStmt(
C->getCondition()));
3849template <
typename Derived>
3850template <
typename T>
3851bool RecursiveASTVisitor<Derived>::VisitOMPClauseList(
T *Node) {
3852 for (
auto *E : Node->varlist()) {
3858template <
typename Derived>
3860 OMPInclusiveClause *
C) {
3861 TRY_TO(VisitOMPClauseList(
C));
3865template <
typename Derived>
3867 OMPExclusiveClause *
C) {
3868 TRY_TO(VisitOMPClauseList(
C));
3872template <
typename Derived>
3874 TRY_TO(VisitOMPClauseList(
C));
3875 for (
auto *E :
C->private_copies()) {
3881template <
typename Derived>
3883 OMPFirstprivateClause *
C) {
3884 TRY_TO(VisitOMPClauseList(
C));
3885 TRY_TO(VisitOMPClauseWithPreInit(
C));
3886 for (
auto *E :
C->private_copies()) {
3889 for (
auto *E :
C->inits()) {
3895template <
typename Derived>
3897 OMPLastprivateClause *
C) {
3898 TRY_TO(VisitOMPClauseList(
C));
3899 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3900 for (
auto *E :
C->private_copies()) {
3903 for (
auto *E :
C->source_exprs()) {
3906 for (
auto *E :
C->destination_exprs()) {
3909 for (
auto *E :
C->assignment_ops()) {
3915template <
typename Derived>
3917 TRY_TO(VisitOMPClauseList(
C));
3921template <
typename Derived>
3923 TRY_TO(TraverseStmt(
C->getStep()));
3924 TRY_TO(TraverseStmt(
C->getCalcStep()));
3925 TRY_TO(VisitOMPClauseList(
C));
3926 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3927 for (
auto *E :
C->privates()) {
3930 for (
auto *E :
C->inits()) {
3933 for (
auto *E :
C->updates()) {
3936 for (
auto *E :
C->finals()) {
3942template <
typename Derived>
3944 TRY_TO(TraverseStmt(
C->getAlignment()));
3945 TRY_TO(VisitOMPClauseList(
C));
3949template <
typename Derived>
3951 TRY_TO(VisitOMPClauseList(
C));
3952 for (
auto *E :
C->source_exprs()) {
3955 for (
auto *E :
C->destination_exprs()) {
3958 for (
auto *E :
C->assignment_ops()) {
3964template <
typename Derived>
3966 OMPCopyprivateClause *
C) {
3967 TRY_TO(VisitOMPClauseList(
C));
3968 for (
auto *E :
C->source_exprs()) {
3971 for (
auto *E :
C->destination_exprs()) {
3974 for (
auto *E :
C->assignment_ops()) {
3980template <
typename Derived>
3984 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
3985 TRY_TO(VisitOMPClauseList(
C));
3986 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3987 for (
auto *E :
C->privates()) {
3990 for (
auto *E :
C->lhs_exprs()) {
3993 for (
auto *E :
C->rhs_exprs()) {
3996 for (
auto *E :
C->reduction_ops()) {
3999 if (
C->getModifier() == OMPC_REDUCTION_inscan) {
4000 for (
auto *E :
C->copy_ops()) {
4003 for (
auto *E :
C->copy_array_temps()) {
4006 for (
auto *E :
C->copy_array_elems()) {
4013template <
typename Derived>
4015 OMPTaskReductionClause *
C) {
4017 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
4018 TRY_TO(VisitOMPClauseList(
C));
4019 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
4020 for (
auto *E :
C->privates()) {
4023 for (
auto *E :
C->lhs_exprs()) {
4026 for (
auto *E :
C->rhs_exprs()) {
4029 for (
auto *E :
C->reduction_ops()) {
4035template <
typename Derived>
4037 OMPInReductionClause *
C) {
4039 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
4040 TRY_TO(VisitOMPClauseList(
C));
4041 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
4042 for (
auto *E :
C->privates()) {
4045 for (
auto *E :
C->lhs_exprs()) {
4048 for (
auto *E :
C->rhs_exprs()) {
4051 for (
auto *E :
C->reduction_ops()) {
4054 for (
auto *E :
C->taskgroup_descriptors())
4059template <
typename Derived>
4061 TRY_TO(VisitOMPClauseList(
C));
4065template <
typename Derived>
4067 TRY_TO(TraverseStmt(
C->getDepobj()));
4071template <
typename Derived>
4073 TRY_TO(VisitOMPClauseList(
C));
4077template <
typename Derived>
4079 TRY_TO(VisitOMPClauseWithPreInit(
C));
4080 TRY_TO(TraverseStmt(
C->getDevice()));
4084template <
typename Derived>
4086 TRY_TO(VisitOMPClauseList(
C));
4090template <
typename Derived>
4092 OMPNumTeamsClause *
C) {
4093 if (
auto *E =
C->getModifierExpr())
4095 TRY_TO(VisitOMPClauseList(
C));
4096 TRY_TO(VisitOMPClauseWithPreInit(
C));
4100template <
typename Derived>
4102 OMPThreadLimitClause *
C) {
4103 if (
auto *E =
C->getModifierExpr())
4105 TRY_TO(VisitOMPClauseList(
C));
4106 TRY_TO(VisitOMPClauseWithPreInit(
C));
4110template <
typename Derived>
4112 OMPPriorityClause *
C) {
4113 TRY_TO(VisitOMPClauseWithPreInit(
C));
4114 TRY_TO(TraverseStmt(
C->getPriority()));
4118template <
typename Derived>
4120 OMPGrainsizeClause *
C) {
4121 TRY_TO(VisitOMPClauseWithPreInit(
C));
4122 TRY_TO(TraverseStmt(
C->getGrainsize()));
4126template <
typename Derived>
4128 OMPNumTasksClause *
C) {
4129 TRY_TO(VisitOMPClauseWithPreInit(
C));
4130 TRY_TO(TraverseStmt(
C->getNumTasks()));
4134template <
typename Derived>
4136 TRY_TO(TraverseStmt(
C->getHint()));
4140template <
typename Derived>
4142 OMPDistScheduleClause *
C) {
4143 TRY_TO(VisitOMPClauseWithPreInit(
C));
4144 TRY_TO(TraverseStmt(
C->getChunkSize()));
4148template <
typename Derived>
4154template <
typename Derived>
4156 TRY_TO(VisitOMPClauseList(
C));
4160template <
typename Derived>
4162 TRY_TO(VisitOMPClauseList(
C));
4166template <
typename Derived>
4168 OMPUseDevicePtrClause *
C) {
4169 TRY_TO(VisitOMPClauseList(
C));
4173template <
typename Derived>
4175 OMPUseDeviceAddrClause *
C) {
4176 TRY_TO(VisitOMPClauseList(
C));
4180template <
typename Derived>
4182 OMPIsDevicePtrClause *
C) {
4183 TRY_TO(VisitOMPClauseList(
C));
4187template <
typename Derived>
4189 OMPHasDeviceAddrClause *
C) {
4190 TRY_TO(VisitOMPClauseList(
C));
4194template <
typename Derived>
4196 OMPNontemporalClause *
C) {
4197 TRY_TO(VisitOMPClauseList(
C));
4198 for (
auto *E :
C->private_refs()) {
4204template <
typename Derived>
4209template <
typename Derived>
4211 TRY_TO(TraverseStmt(
C->getEventHandler()));
4215template <
typename Derived>
4217 OMPUsesAllocatorsClause *
C) {
4218 for (
unsigned I = 0, E =
C->getNumberOfAllocators(); I < E; ++I) {
4219 const OMPUsesAllocatorsClause::Data
Data =
C->getAllocatorData(I);
4226template <
typename Derived>
4228 OMPAffinityClause *
C) {
4229 TRY_TO(TraverseStmt(
C->getModifier()));
4230 for (
Expr *E :
C->varlist())
4235template <
typename Derived>
4237 TRY_TO(VisitOMPClauseWithPreInit(
C));
4238 TRY_TO(TraverseStmt(
C->getThreadID()));
4242template <
typename Derived>
4247template <
typename Derived>
4249 OMPXDynCGroupMemClause *
C) {
4250 TRY_TO(VisitOMPClauseWithPreInit(
C));
4251 TRY_TO(TraverseStmt(
C->getSize()));
4255template <
typename Derived>
4257 OMPDynGroupprivateClause *
C) {
4258 TRY_TO(VisitOMPClauseWithPreInit(
C));
4259 TRY_TO(TraverseStmt(
C->getSize()));
4263template <
typename Derived>
4265 OMPDoacrossClause *
C) {
4266 TRY_TO(VisitOMPClauseList(
C));
4270template <
typename Derived>
4272 OMPXAttributeClause *
C) {
4276template <
typename Derived>
4281template <
typename Derived>
4282bool RecursiveASTVisitor<Derived>::TraverseOpenACCConstructStmt(
4284 TRY_TO(VisitOpenACCClauseList(
C->clauses()));
4288template <
typename Derived>
4289bool RecursiveASTVisitor<Derived>::TraverseOpenACCAssociatedStmtConstruct(
4291 TRY_TO(TraverseOpenACCConstructStmt(S));
4292 TRY_TO(TraverseStmt(S->getAssociatedStmt()));
4296template <
typename Derived>
4297bool RecursiveASTVisitor<Derived>::VisitOpenACCClause(
const OpenACCClause *
C) {
4298 for (
const Stmt *Child :
C->children())
4299 TRY_TO(TraverseStmt(
const_cast<Stmt *
>(Child)));
4303template <
typename Derived>
4304bool RecursiveASTVisitor<Derived>::VisitOpenACCClauseList(
4307 for (
const auto *
C : Clauses)
4308 TRY_TO(VisitOpenACCClause(
C));
4313 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4315 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4317 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4319 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4321 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4323 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4325 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4327 if (S->hasDevNumExpr())
4328 TRY_TO(TraverseStmt(S->getDevNumExpr()));
4329 for (
auto *E : S->getQueueIdExprs())
4331 TRY_TO(VisitOpenACCClauseList(S->clauses()));
4334 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4336 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4338 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4340 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4342 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4344 for (
auto *E : S->getVarList())