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()));
1743 if (D->getFriendType())
1744 TRY_TO(TraverseTypeLoc(D->getFriendType()->getTypeLoc()));
1748 TRY_TO(TraverseDecl(D->getFriendDecl()));
1750 TRY_TO(TraverseTemplateParameterListHelper(TPL));
1761 TRY_TO(TraverseStmt(D->getAssertExpr()));
1762 TRY_TO(TraverseStmt(D->getMessage()));
1768 if (D->getQualifierLoc())
1771 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
1772 if (
auto NumArgs = D->getNumTemplateArgs())
1773 for (
unsigned I = 0; I != *NumArgs; ++I)
1774 TRY_TO(TraverseTemplateArgumentLoc(D->getTemplateArg(I)));
1784 auto Scope = D->getASTContext().getTraversalScope();
1785 bool HasLimitedScope =
1787 if (HasLimitedScope) {
1788 ShouldVisitChildren =
false;
1789 for (
auto *Child :
Scope) {
1790 if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
1791 TRY_TO(TraverseDecl(Child));
1807 ShouldVisitChildren =
false;
1825 for (
auto typeParam : *typeParamList) {
1826 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1829 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1831 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1843 for (
auto typeParam : *typeParamList) {
1844 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1849 TRY_TO(TraverseTypeLoc(superTInfo->getTypeLoc()));
1851 if (D->isThisDeclarationADefinition()) {
1852 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1854 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1860 if (D->isThisDeclarationADefinition()) {
1861 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1863 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1869 if (D->getReturnTypeSourceInfo()) {
1870 TRY_TO(TraverseTypeLoc(D->getReturnTypeSourceInfo()->getTypeLoc()));
1875 if (D->isThisDeclarationADefinition()) {
1876 TRY_TO(TraverseStmt(D->getBody()));
1878 ShouldVisitChildren =
false;
1882 if (D->hasExplicitBound()) {
1883 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1891 if (D->getTypeSourceInfo())
1892 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1894 TRY_TO(TraverseType(D->getType()));
1895 ShouldVisitChildren =
false;
1900 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
1904 {
TRY_TO(TraverseTypeLoc(D->getEnumTypeLoc())); })
1917 if (D->getInstantiations() &&
1918 getDerived().shouldVisitTemplateInstantiations())
1919 TRY_TO(TraverseStmt(D->getInstantiations()));
1921 TRY_TO(TraverseStmt(D->getExpansionPattern()));
1925 for (
auto *I : D->varlist()) {
1931 for (
auto *I : D->varlist()) {
1937 for (
auto *
C : D->clauselists()) {
1943 TRY_TO(TraverseStmt(D->getCombiner()));
1946 TRY_TO(TraverseType(D->getType()));
1951 for (
auto *
C : D->clauselists())
1953 TRY_TO(TraverseType(D->getType()));
1960 for (
auto *I : D->varlist())
1962 for (
auto *
C : D->clauselists())
1967 {
TRY_TO(VisitOpenACCClauseList(D->clauses())); })
1970 TRY_TO(TraverseStmt(D->getFunctionReference()));
1971 TRY_TO(VisitOpenACCClauseList(D->clauses()));
1975template <typename Derived>
1976bool RecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
1982 if (
Expr *RequiresClause = TPL->getRequiresClause()) {
1983 TRY_TO(TraverseStmt(RequiresClause));
1989template <
typename Derived>
1990template <
typename T>
1991bool RecursiveASTVisitor<Derived>::TraverseDeclTemplateParameterLists(
T *D) {
1993 TraverseTemplateParameterListHelper(TPL);
1997template <
typename Derived>
2000 for (
auto *SD : D->specializations()) {
2001 for (
auto *RD : SD->redecls()) {
2008 TRY_TO(TraverseDecl(RD));
2025template <
typename Derived>
2028 for (
auto *SD : D->specializations()) {
2029 for (
auto *RD : SD->redecls()) {
2034 TRY_TO(TraverseDecl(RD));
2050template <
typename Derived>
2053 for (
auto *FD : D->specializations()) {
2054 for (
auto *RD : FD->redecls()) {
2055 switch (RD->getTemplateSpecializationKind()) {
2059 TRY_TO(TraverseDecl(RD));
2068 TRY_TO(TraverseDecl(RD));
2082#define DEF_TRAVERSE_TMPL_DECL(TMPLDECLKIND) \
2083 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateDecl, { \
2084 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2085 TRY_TO(TraverseDecl(D->getTemplatedDecl())); \
2093 if (getDerived().shouldVisitTemplateInstantiations() && \
2094 D == D->getCanonicalDecl()) \
2095 TRY_TO(TraverseTemplateInstantiations(D)); \
2109 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2110 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2111 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2112 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2116 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2119template <typename Derived>
2120bool RecursiveASTVisitor<Derived>::TraverseTemplateTypeParamDeclConstraints(
2122 if (
const auto *TC = D->getTypeConstraint())
2123 TRY_TO(TraverseTypeConstraint(TC));
2129 if (D->getTypeForDecl())
2131 TRY_TO(TraverseTemplateTypeParamDeclConstraints(D));
2132 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2133 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2137 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2144 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2151 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2152 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2156 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2157 TRY_TO(TraverseStmt(D->getConstraintExpr()));
2172 TRY_TO(TraverseDeclTemplateParameterLists(D));
2175 if (
auto *TSI = D->getIntegerTypeSourceInfo())
2176 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2182template <typename Derived>
2183bool RecursiveASTVisitor<Derived>::TraverseRecordHelper(
RecordDecl *D) {
2187 TRY_TO(TraverseDeclTemplateParameterLists(D));
2192template <
typename Derived>
2195 TRY_TO(TraverseTypeLoc(
Base.getTypeSourceInfo()->getTypeLoc()));
2199template <
typename Derived>
2200bool RecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(
CXXRecordDecl *D) {
2201 if (!TraverseRecordHelper(D))
2203 if (D->isCompleteDefinition()) {
2204 for (
const auto &I : D->bases()) {
2205 TRY_TO(TraverseCXXBaseSpecifier(I));
2217template <typename Derived>
2218bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLocsHelper(
2220 for (
unsigned I = 0; I < Count; ++I) {
2221 TRY_TO(TraverseTemplateArgumentLoc(TAL[I]));
2226#define DEF_TRAVERSE_TMPL_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2227 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateSpecializationDecl, { \
2237 if (D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) { \
2238 const auto *ArgsWritten = D->getTemplateArgsAsWritten(); \
2239 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2240 ArgsWritten->getTemplateArgs(), ArgsWritten->NumTemplateArgs)); \
2241 } else if (!getDerived().shouldVisitTemplateInstantiations()) { \
2250 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2256#define DEF_TRAVERSE_TMPL_PART_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2257 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplatePartialSpecializationDecl, { \
2259 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2261 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2262 D->getTemplateArgsAsWritten()->getTemplateArgs(), \
2263 D->getTemplateArgsAsWritten()->NumTemplateArgs)); \
2268 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2282 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2287template <typename Derived>
2288bool RecursiveASTVisitor<Derived>::TraverseDeclaratorHelper(
DeclaratorDecl *D) {
2289 TRY_TO(TraverseDeclTemplateParameterLists(D));
2291 if (D->getTypeSourceInfo())
2292 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2294 TRY_TO(TraverseType(D->getType()));
2299 TRY_TO(TraverseVarHelper(D));
2300 for (
auto *Binding : D->bindings()) {
2301 TRY_TO(TraverseDecl(Binding));
2306 if (getDerived().shouldVisitImplicitCode()) {
2307 TRY_TO(TraverseStmt(D->getBinding()));
2308 if (
const auto HoldingVar = D->getHoldingVar())
2309 TRY_TO(TraverseDecl(HoldingVar));
2321 TRY_TO(TraverseDeclaratorHelper(D));
2322 if (D->isBitField())
2323 TRY_TO(TraverseStmt(D->getBitWidth()));
2324 if (D->hasInClassInitializer())
2325 TRY_TO(TraverseStmt(D->getInClassInitializer()));
2329 TRY_TO(TraverseDeclaratorHelper(D));
2330 if (D->isBitField())
2331 TRY_TO(TraverseStmt(D->getBitWidth()));
2336 TRY_TO(TraverseDeclaratorHelper(D));
2337 if (D->isBitField())
2338 TRY_TO(TraverseStmt(D->getBitWidth()));
2342template <typename Derived>
2343bool RecursiveASTVisitor<Derived>::TraverseFunctionHelper(
FunctionDecl *D) {
2344 TRY_TO(TraverseDeclTemplateParameterLists(D));
2346 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2354 D->getTemplateSpecializationInfo()) {
2360 FTSI->TemplateArgumentsAsWritten) {
2361 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2362 TALI->NumTemplateArgs));
2366 D->getDependentSpecializationInfo()) {
2368 DFSI->TemplateArgumentsAsWritten) {
2369 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2370 TALI->NumTemplateArgs));
2379 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2380 }
else if (getDerived().shouldVisitImplicitCode()) {
2392 D->getTrailingRequiresClause()) {
2394 const_cast<Expr *
>(TrailingRequiresClause.ConstraintExpr)));
2399 for (
auto *I : Ctor->inits()) {
2400 if (I->isWritten() || getDerived().shouldVisitImplicitCode())
2401 TRY_TO(TraverseConstructorInitializer(I));
2406 D->isThisDeclarationADefinition() &&
2409 (!D->isDefaulted() || getDerived().shouldVisitImplicitCode());
2411 if (
const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
2413 if (RD->isLambda() &&
2415 VisitBody = VisitBody && getDerived().shouldVisitLambdaBody();
2421 TRY_TO(TraverseStmt(D->getBody()));
2424 for (
auto *Child : D->decls()) {
2426 TRY_TO(TraverseDecl(Child));
2435 ShouldVisitChildren =
false;
2442 ShouldVisitChildren =
false;
2449 ShouldVisitChildren =
false;
2456 ShouldVisitChildren =
false;
2465 ShouldVisitChildren =
false;
2472 ShouldVisitChildren =
false;
2476template <typename Derived>
2477bool RecursiveASTVisitor<Derived>::TraverseVarHelper(
VarDecl *D) {
2478 TRY_TO(TraverseDeclaratorHelper(D));
2481 (!D->isCXXForRangeDecl() || getDerived().shouldVisitImplicitCode()))
2482 TRY_TO(TraverseStmt(D->getInit()));
2492 TRY_TO(TraverseDeclaratorHelper(D));
2493 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2494 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2498 TRY_TO(TraverseVarHelper(D));
2500 if (D->hasDefaultArg() && D->hasUninstantiatedDefaultArg() &&
2501 !D->hasUnparsedDefaultArg())
2502 TRY_TO(TraverseStmt(D->getUninstantiatedDefaultArg()));
2504 if (D->hasDefaultArg() && !D->hasUninstantiatedDefaultArg() &&
2505 !D->hasUnparsedDefaultArg())
2506 TRY_TO(TraverseStmt(D->getDefaultArg()));
2512 TRY_TO(TraverseTemplateArguments(D->getTemplateArguments()));
2528 template <
typename Derived> \
2530 STMT *S, DataRecursionQueue *Queue) { \
2531 bool ShouldVisitChildren =
true; \
2533 if (!getDerived().shouldTraversePostOrder()) \
2534 TRY_TO(WalkUpFrom##
STMT(S)); \
2536 if (ShouldVisitChildren) { \
2537 for (
Stmt * SubStmt : getDerived().getStmtChildren(S)) { \
2538 TRY_TO_TRAVERSE_OR_ENQUEUE_STMT(SubStmt); \
2545 if (!Queue && ReturnValue && getDerived().shouldTraversePostOrder()) { \
2546 TRY_TO(WalkUpFrom##
STMT(S)); \
2553 for (
unsigned I = 0, E = S->getNumInputs(); I < E; ++I) {
2556 for (
unsigned I = 0, E = S->getNumOutputs(); I < E; ++I) {
2559 for (
unsigned I = 0, E = S->getNumClobbers(); I < E; ++I) {
2572 TRY_TO(TraverseDecl(S->getExceptionDecl()));
2577 TRY_TO(TraverseDecl(S->getCatchParamDecl()));
2582 for (
auto *I : S->decls()) {
2590 ShouldVisitChildren =
false;
2618 if (!getDerived().shouldVisitImplicitCode()) {
2625 ShouldVisitChildren =
false;
2631 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2642 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2643 if (S->hasExplicitTemplateArgs()) {
2644 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2645 S->getNumTemplateArgs()));
2651 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2652 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2653 S->getNumTemplateArgs()));
2658 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2659 if (S->hasExplicitTemplateArgs()) {
2660 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2661 S->getNumTemplateArgs()));
2667 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2668 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2669 S->getNumTemplateArgs()));
2679 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2683 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2687 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2691 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2695 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2699 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2703 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2707 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2710template <typename Derived>
2716 if (!getDerived().shouldTraversePostOrder())
2717 TRY_TO(WalkUpFromInitListExpr(S));
2724 if (!Queue && getDerived().shouldTraversePostOrder())
2725 TRY_TO(WalkUpFromInitListExpr(S));
2730template <
typename Derived>
2736template <
typename Derived>
2739 if (!getDerived().shouldTraversePostOrder())
2740 TRY_TO(VisitConceptReference(CR));
2742 TRY_TO(TraverseDeclarationNameInfo(CR->getConceptNameInfo()));
2743 if (CR->hasExplicitTemplateArgs())
2744 TRY_TO(TraverseTemplateArgumentLocsHelper(
2745 CR->getTemplateArgsAsWritten()->getTemplateArgs(),
2746 CR->getTemplateArgsAsWritten()->NumTemplateArgs));
2747 if (getDerived().shouldTraversePostOrder())
2748 TRY_TO(VisitConceptReference(CR));
2752template <
typename Derived>
2755 TRY_TO(VisitOffsetOfNode(Node));
2767template <
typename Derived>
2770 if (S->isSemanticForm() && S->isSyntacticForm()) {
2772 TRY_TO(TraverseSynOrSemInitListExpr(S, Queue));
2775 TRY_TO(TraverseSynOrSemInitListExpr(
2776 S->isSemanticForm() ? S->getSyntacticForm() : S, Queue));
2777 if (getDerived().shouldVisitImplicitCode()) {
2780 TRY_TO(TraverseSynOrSemInitListExpr(
2781 S->isSemanticForm() ? S : S->getSemanticForm(), Queue));
2790 if (S->isExprPredicate())
2791 TRY_TO(TraverseStmt(S->getControllingExpr()));
2793 TRY_TO(TraverseTypeLoc(S->getControllingType()->getTypeLoc()));
2797 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2800 ShouldVisitChildren =
false;
2808 e = S->semantics_end();
2812 sub = OVE->getSourceExpr();
2815 ShouldVisitChildren =
false;
2821 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2826 TRY_TO(TraverseTypeLoc(S->getAllocatedTypeSourceInfo()->getTypeLoc()));
2830 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2834 for (
unsigned I = 0, E = S->getNumComponents(); I != E; ++I)
2835 TRY_TO(TraverseOffsetOfNode(&S->getComponent(I)));
2841 if (S->isArgumentType())
2842 TRY_TO(TraverseTypeLoc(S->getArgumentTypeInfo()->getTypeLoc()));
2848 if (S->isTypeOperand())
2849 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2861 if (S->isTypeOperand())
2862 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2866 for (
unsigned I = 0, N = S->getNumArgs(); I != N; ++I)
2867 TRY_TO(TraverseTypeLoc(S->getArg(I)->getTypeLoc()));
2871 TRY_TO(TraverseTypeLoc(S->getQueriedTypeSourceInfo()->getTypeLoc()));
2879 TRY_TO(TraverseTypeLoc(S->getWrittenTypeInfo()->getTypeLoc()));
2884 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2890 for (
unsigned I = 0, N = S->capture_size(); I != N; ++I) {
2892 if (
C->isExplicit() || getDerived().shouldVisitImplicitCode()) {
2893 TRY_TO(TraverseLambdaCapture(S,
C, S->capture_init_begin()[I]));
2897 if (getDerived().shouldVisitImplicitCode()) {
2899 TRY_TO(TraverseDecl(S->getLambdaClass()));
2902 TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
2905 TRY_TO(TraverseTemplateParameterListHelper(S->getTemplateParameterList()));
2906 if (S->hasExplicitParameters()) {
2908 for (
unsigned I = 0, N = Proto.getNumParams(); I != N; ++I)
2909 TRY_TO(TraverseDecl(Proto.getParam(I)));
2912 auto *
T = Proto.getTypePtr();
2913 for (
const auto &E :
T->exceptions())
2916 if (
Expr *NE =
T->getNoexceptExpr())
2919 if (S->hasExplicitResultType())
2920 TRY_TO(TraverseTypeLoc(Proto.getReturnLoc()));
2922 const_cast<Expr *
>(S->getTrailingRequiresClause().ConstraintExpr));
2926 ShouldVisitChildren =
false;
2931 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2953 TRY_TO(TraverseDecl(S->getBlockDecl()));
2959 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2965 if (getDerived().shouldVisitImplicitCode())
2966 TRY_TO(TraverseStmt(S->getExpr()));
2970 if (getDerived().shouldVisitImplicitCode())
2971 TRY_TO(TraverseStmt(S->getExpr()));
2983 TRY_TO(TraverseTypeLoc(ScopeInfo->getTypeLoc()));
2984 if (
TypeSourceInfo *DestroyedTypeInfo = S->getDestroyedTypeInfo())
2985 TRY_TO(TraverseTypeLoc(DestroyedTypeInfo->getTypeLoc()));
3009 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
3017 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
3021 if (S->isClassReceiver()) {
3023 QualType Type = IDecl->getASTContext().getObjCInterfaceType(IDecl);
3025 Data.NameLoc = S->getReceiverLocation();
3036 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
3043 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
3046 if (getDerived().shouldVisitImplicitCode()) {
3047 TRY_TO(TraverseStmt(S->getOriginalStmt()));
3048 TRY_TO(TraverseStmt(S->getKernelLaunchIdExpr()));
3049 ShouldVisitChildren =
false;
3066 if (S->hasExplicitTemplateArgs()) {
3067 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3068 S->getNumTemplateArgs()));
3074 if (S->hasExplicitTemplateArgs()) {
3075 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3076 S->getNumTemplateArgs()));
3087 if (getDerived().shouldVisitImplicitCode()) {
3088 TRY_TO(TraverseStmt(S->getOriginalStmt()));
3089 TRY_TO(TraverseStmt(S->getKernelLaunchStmt()));
3090 TRY_TO(TraverseDecl(S->getOutlinedFunctionDecl()));
3091 ShouldVisitChildren =
false;
3097 if (!getDerived().shouldVisitImplicitCode()) {
3099 S->getDecomposedForm();
3100 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.LHS)));
3101 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.RHS)));
3102 ShouldVisitChildren =
false;
3128 if (S->getLifetimeExtendedTemporaryDecl()) {
3129 TRY_TO(TraverseLifetimeExtendedTemporaryDecl(
3130 S->getLifetimeExtendedTemporaryDecl()));
3131 ShouldVisitChildren =
false;
3138 if (!getDerived().shouldVisitImplicitCode()) {
3140 ShouldVisitChildren =
false;
3144 if (!getDerived().shouldVisitImplicitCode()) {
3146 ShouldVisitChildren =
false;
3150 if (!getDerived().shouldVisitImplicitCode()) {
3152 ShouldVisitChildren =
false;
3156 if (!getDerived().shouldVisitImplicitCode()) {
3158 ShouldVisitChildren =
false;
3162 if (!getDerived().shouldVisitImplicitCode()) {
3164 ShouldVisitChildren =
false;
3169 TRY_TO(TraverseConceptReference(S->getConceptReference()));
3173 TRY_TO(TraverseDecl(S->getBody()));
3175 TRY_TO(TraverseDecl(Parm));
3177 TRY_TO(TraverseConceptRequirement(Req));
3200template <typename Derived>
3201bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
3202 OMPExecutableDirective *S) {
3203 for (
auto *
C : S->clauses()) {
3210 if (!getDerived().shouldVisitImplicitCode()) {
3212 TRY_TO(TraverseStmt(S->getLoopStmt()));
3213 ShouldVisitChildren =
false;
3217template <typename Derived>
3219RecursiveASTVisitor<Derived>::TraverseOMPLoopDirective(OMPLoopDirective *S) {
3220 return TraverseOMPExecutableDirective(S);
3224 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3227 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3230 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3233 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3236 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3239 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3242 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3245 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3248 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3251 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3254 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3257 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3260 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3263 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3266 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3269 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3272 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3275 TRY_TO(TraverseDeclarationNameInfo(S->getDirectiveName()));
3276 TRY_TO(TraverseOMPExecutableDirective(S));
3280 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3283 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3286 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3289 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3292 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3295 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3298 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3301 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3304 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3307 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3310 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3313 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3316 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3319 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3322 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3325 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3328 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3331 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3334 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3337 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3340 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3343 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3346 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3349 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3352 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3355 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3358 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3361 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3364 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3367 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3370 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3373 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3376 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3379 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3382 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3385 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3388 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3391 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3394 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3397 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3400 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3403 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3406 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3409 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3412 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3415 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3418 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3421 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3424 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3427 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3430 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3433 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3436 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3439 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3442 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3445 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3448 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3451 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3454 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3457 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3460 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3463template <typename Derived>
3464bool RecursiveASTVisitor<Derived>::TraverseOMPClause(
OMPClause *
C) {
3467 switch (
C->getClauseKind()) {
3468#define GEN_CLANG_CLAUSE_CLASS
3469#define CLAUSE_CLASS(Enum, Str, Class) \
3470 case llvm::omp::Clause::Enum: \
3471 TRY_TO(Visit##Class(static_cast<Class *>(C))); \
3473#define CLAUSE_NO_CLASS(Enum, Str) \
3474 case llvm::omp::Clause::Enum: \
3476#include "llvm/Frontend/OpenMP/OMP.inc"
3481template <
typename Derived>
3482bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPreInit(
3484 TRY_TO(TraverseStmt(Node->getPreInitStmt()));
3488template <
typename Derived>
3489bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPostUpdate(
3491 TRY_TO(VisitOMPClauseWithPreInit(Node));
3492 TRY_TO(TraverseStmt(Node->getPostUpdateExpr()));
3496template <
typename Derived>
3499 TRY_TO(TraverseStmt(
C->getAllocator()));
3503template <
typename Derived>
3505 TRY_TO(TraverseStmt(
C->getAllocator()));
3506 TRY_TO(VisitOMPClauseList(
C));
3510template <
typename Derived>
3512 TRY_TO(VisitOMPClauseWithPreInit(
C));
3513 TRY_TO(TraverseStmt(
C->getCondition()));
3517template <
typename Derived>
3519 TRY_TO(VisitOMPClauseWithPreInit(
C));
3520 TRY_TO(TraverseStmt(
C->getCondition()));
3524template <
typename Derived>
3527 TRY_TO(VisitOMPClauseWithPreInit(
C));
3528 TRY_TO(TraverseStmt(
C->getNumThreads()));
3532template <
typename Derived>
3534 TRY_TO(TraverseStmt(
C->getAlignment()));
3538template <
typename Derived>
3540 TRY_TO(TraverseStmt(
C->getSafelen()));
3544template <
typename Derived>
3546 TRY_TO(TraverseStmt(
C->getSimdlen()));
3550template <
typename Derived>
3552 for (
Expr *E :
C->getSizesRefs())
3557template <
typename Derived>
3559 for (
Expr *E :
C->getCountsRefs())
3564template <
typename Derived>
3567 for (
Expr *E :
C->getArgsRefs())
3572template <
typename Derived>
3577template <
typename Derived>
3580 TRY_TO(TraverseStmt(
C->getFirst()));
3581 TRY_TO(TraverseStmt(
C->getCount()));
3585template <
typename Derived>
3587 TRY_TO(TraverseStmt(
C->getFactor()));
3591template <
typename Derived>
3594 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3598template <
typename Derived>
3603template <
typename Derived>
3609template <
typename Derived>
3611 OMPTransparentClause *
C) {
3612 TRY_TO(TraverseStmt(
C->getImpexType()));
3616template <
typename Derived>
3621template <
typename Derived>
3623 OMPUnifiedAddressClause *) {
3627template <
typename Derived>
3629 OMPUnifiedSharedMemoryClause *) {
3633template <
typename Derived>
3635 OMPReverseOffloadClause *) {
3639template <
typename Derived>
3641 OMPDynamicAllocatorsClause *) {
3645template <
typename Derived>
3647 OMPAtomicDefaultMemOrderClause *) {
3651template <
typename Derived>
3656template <
typename Derived>
3661template <
typename Derived>
3666template <
typename Derived>
3668 TRY_TO(TraverseStmt(
C->getMessageString()));
3672template <
typename Derived>
3675 TRY_TO(VisitOMPClauseWithPreInit(
C));
3676 TRY_TO(TraverseStmt(
C->getChunkSize()));
3680template <
typename Derived>
3682 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3686template <
typename Derived>
3688 TRY_TO(TraverseStmt(
C->getCondition()));
3692template <
typename Derived>
3697template <
typename Derived>
3703template <
typename Derived>
3708template <
typename Derived>
3713template <
typename Derived>
3718template <
typename Derived>
3720 OMPUpdateDependObjectsClause *) {
3724template <
typename Derived>
3729template <
typename Derived>
3734template <
typename Derived>
3739template <
typename Derived>
3744template <
typename Derived>
3749template <
typename Derived>
3754template <
typename Derived>
3759template <
typename Derived>
3764template <
typename Derived>
3769template <
typename Derived>
3771 OMPNoOpenMPRoutinesClause *) {
3775template <
typename Derived>
3777 OMPNoOpenMPConstructsClause *) {
3781template <
typename Derived>
3783 OMPNoParallelismClause *) {
3787template <
typename Derived>
3792template <
typename Derived>
3797template <
typename Derived>
3802template <
typename Derived>
3807template <
typename Derived>
3812template <
typename Derived>
3817template <
typename Derived>
3822template <
typename Derived>
3824 TRY_TO(VisitOMPClauseList(
C));
3827 for (
Expr *A :
C->attrs())
3832template <
typename Derived>
3834 TRY_TO(TraverseStmt(
C->getInteropVar()));
3838template <
typename Derived>
3840 TRY_TO(TraverseStmt(
C->getInteropVar()));
3844template <
typename Derived>
3846 OMPNovariantsClause *
C) {
3847 TRY_TO(VisitOMPClauseWithPreInit(
C));
3848 TRY_TO(TraverseStmt(
C->getCondition()));
3852template <
typename Derived>
3854 OMPNocontextClause *
C) {
3855 TRY_TO(VisitOMPClauseWithPreInit(
C));
3856 TRY_TO(TraverseStmt(
C->getCondition()));
3860template <
typename Derived>
3861template <
typename T>
3862bool RecursiveASTVisitor<Derived>::VisitOMPClauseList(
T *Node) {
3863 for (
auto *E : Node->varlist()) {
3869template <
typename Derived>
3871 OMPInclusiveClause *
C) {
3872 TRY_TO(VisitOMPClauseList(
C));
3876template <
typename Derived>
3878 OMPExclusiveClause *
C) {
3879 TRY_TO(VisitOMPClauseList(
C));
3883template <
typename Derived>
3885 TRY_TO(VisitOMPClauseList(
C));
3886 for (
auto *E :
C->private_copies()) {
3892template <
typename Derived>
3894 OMPFirstprivateClause *
C) {
3895 TRY_TO(VisitOMPClauseList(
C));
3896 TRY_TO(VisitOMPClauseWithPreInit(
C));
3897 for (
auto *E :
C->private_copies()) {
3900 for (
auto *E :
C->inits()) {
3906template <
typename Derived>
3908 OMPLastprivateClause *
C) {
3909 TRY_TO(VisitOMPClauseList(
C));
3910 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3911 for (
auto *E :
C->private_copies()) {
3914 for (
auto *E :
C->source_exprs()) {
3917 for (
auto *E :
C->destination_exprs()) {
3920 for (
auto *E :
C->assignment_ops()) {
3926template <
typename Derived>
3928 TRY_TO(VisitOMPClauseList(
C));
3932template <
typename Derived>
3934 TRY_TO(TraverseStmt(
C->getStep()));
3935 TRY_TO(TraverseStmt(
C->getCalcStep()));
3936 TRY_TO(VisitOMPClauseList(
C));
3937 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3938 for (
auto *E :
C->privates()) {
3941 for (
auto *E :
C->inits()) {
3944 for (
auto *E :
C->updates()) {
3947 for (
auto *E :
C->finals()) {
3953template <
typename Derived>
3955 TRY_TO(TraverseStmt(
C->getAlignment()));
3956 TRY_TO(VisitOMPClauseList(
C));
3960template <
typename Derived>
3962 TRY_TO(VisitOMPClauseList(
C));
3963 for (
auto *E :
C->source_exprs()) {
3966 for (
auto *E :
C->destination_exprs()) {
3969 for (
auto *E :
C->assignment_ops()) {
3975template <
typename Derived>
3977 OMPCopyprivateClause *
C) {
3978 TRY_TO(VisitOMPClauseList(
C));
3979 for (
auto *E :
C->source_exprs()) {
3982 for (
auto *E :
C->destination_exprs()) {
3985 for (
auto *E :
C->assignment_ops()) {
3991template <
typename Derived>
3995 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
3996 TRY_TO(VisitOMPClauseList(
C));
3997 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3998 for (
auto *E :
C->privates()) {
4001 for (
auto *E :
C->lhs_exprs()) {
4004 for (
auto *E :
C->rhs_exprs()) {
4007 for (
auto *E :
C->reduction_ops()) {
4010 if (
C->getModifier() == OMPC_REDUCTION_inscan) {
4011 for (
auto *E :
C->copy_ops()) {
4014 for (
auto *E :
C->copy_array_temps()) {
4017 for (
auto *E :
C->copy_array_elems()) {
4024template <
typename Derived>
4026 OMPTaskReductionClause *
C) {
4028 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
4029 TRY_TO(VisitOMPClauseList(
C));
4030 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
4031 for (
auto *E :
C->privates()) {
4034 for (
auto *E :
C->lhs_exprs()) {
4037 for (
auto *E :
C->rhs_exprs()) {
4040 for (
auto *E :
C->reduction_ops()) {
4046template <
typename Derived>
4048 OMPInReductionClause *
C) {
4050 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
4051 TRY_TO(VisitOMPClauseList(
C));
4052 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
4053 for (
auto *E :
C->privates()) {
4056 for (
auto *E :
C->lhs_exprs()) {
4059 for (
auto *E :
C->rhs_exprs()) {
4062 for (
auto *E :
C->reduction_ops()) {
4065 for (
auto *E :
C->taskgroup_descriptors())
4070template <
typename Derived>
4072 TRY_TO(VisitOMPClauseList(
C));
4076template <
typename Derived>
4078 TRY_TO(TraverseStmt(
C->getDepobj()));
4082template <
typename Derived>
4084 TRY_TO(VisitOMPClauseList(
C));
4088template <
typename Derived>
4090 TRY_TO(VisitOMPClauseWithPreInit(
C));
4091 TRY_TO(TraverseStmt(
C->getDevice()));
4095template <
typename Derived>
4097 TRY_TO(VisitOMPClauseList(
C));
4101template <
typename Derived>
4103 OMPNumTeamsClause *
C) {
4104 if (
auto *E =
C->getModifierExpr())
4106 TRY_TO(VisitOMPClauseList(
C));
4107 TRY_TO(VisitOMPClauseWithPreInit(
C));
4111template <
typename Derived>
4113 OMPThreadLimitClause *
C) {
4114 if (
auto *E =
C->getModifierExpr())
4116 TRY_TO(VisitOMPClauseList(
C));
4117 TRY_TO(VisitOMPClauseWithPreInit(
C));
4121template <
typename Derived>
4123 OMPPriorityClause *
C) {
4124 TRY_TO(VisitOMPClauseWithPreInit(
C));
4125 TRY_TO(TraverseStmt(
C->getPriority()));
4129template <
typename Derived>
4131 OMPGrainsizeClause *
C) {
4132 TRY_TO(VisitOMPClauseWithPreInit(
C));
4133 TRY_TO(TraverseStmt(
C->getGrainsize()));
4137template <
typename Derived>
4139 OMPNumTasksClause *
C) {
4140 TRY_TO(VisitOMPClauseWithPreInit(
C));
4141 TRY_TO(TraverseStmt(
C->getNumTasks()));
4145template <
typename Derived>
4147 TRY_TO(TraverseStmt(
C->getHint()));
4151template <
typename Derived>
4153 OMPDistScheduleClause *
C) {
4154 TRY_TO(VisitOMPClauseWithPreInit(
C));
4155 TRY_TO(TraverseStmt(
C->getChunkSize()));
4159template <
typename Derived>
4165template <
typename Derived>
4167 TRY_TO(VisitOMPClauseList(
C));
4171template <
typename Derived>
4173 TRY_TO(VisitOMPClauseList(
C));
4177template <
typename Derived>
4179 OMPUseDevicePtrClause *
C) {
4180 TRY_TO(VisitOMPClauseList(
C));
4184template <
typename Derived>
4186 OMPUseDeviceAddrClause *
C) {
4187 TRY_TO(VisitOMPClauseList(
C));
4191template <
typename Derived>
4193 OMPIsDevicePtrClause *
C) {
4194 TRY_TO(VisitOMPClauseList(
C));
4198template <
typename Derived>
4200 OMPHasDeviceAddrClause *
C) {
4201 TRY_TO(VisitOMPClauseList(
C));
4205template <
typename Derived>
4207 OMPNontemporalClause *
C) {
4208 TRY_TO(VisitOMPClauseList(
C));
4209 for (
auto *E :
C->private_refs()) {
4215template <
typename Derived>
4220template <
typename Derived>
4222 TRY_TO(TraverseStmt(
C->getEventHandler()));
4226template <
typename Derived>
4228 OMPUsesAllocatorsClause *
C) {
4229 for (
unsigned I = 0, E =
C->getNumberOfAllocators(); I < E; ++I) {
4230 const OMPUsesAllocatorsClause::Data
Data =
C->getAllocatorData(I);
4237template <
typename Derived>
4239 OMPAffinityClause *
C) {
4240 TRY_TO(TraverseStmt(
C->getModifier()));
4241 for (
Expr *E :
C->varlist())
4246template <
typename Derived>
4248 TRY_TO(VisitOMPClauseWithPreInit(
C));
4249 TRY_TO(TraverseStmt(
C->getThreadID()));
4253template <
typename Derived>
4258template <
typename Derived>
4260 OMPXDynCGroupMemClause *
C) {
4261 TRY_TO(VisitOMPClauseWithPreInit(
C));
4262 TRY_TO(TraverseStmt(
C->getSize()));
4266template <
typename Derived>
4268 OMPDynGroupprivateClause *
C) {
4269 TRY_TO(VisitOMPClauseWithPreInit(
C));
4270 TRY_TO(TraverseStmt(
C->getSize()));
4274template <
typename Derived>
4276 OMPDoacrossClause *
C) {
4277 TRY_TO(VisitOMPClauseList(
C));
4281template <
typename Derived>
4283 OMPXAttributeClause *
C) {
4287template <
typename Derived>
4292template <
typename Derived>
4293bool RecursiveASTVisitor<Derived>::TraverseOpenACCConstructStmt(
4295 TRY_TO(VisitOpenACCClauseList(
C->clauses()));
4299template <
typename Derived>
4300bool RecursiveASTVisitor<Derived>::TraverseOpenACCAssociatedStmtConstruct(
4302 TRY_TO(TraverseOpenACCConstructStmt(S));
4303 TRY_TO(TraverseStmt(S->getAssociatedStmt()));
4307template <
typename Derived>
4308bool RecursiveASTVisitor<Derived>::VisitOpenACCClause(
const OpenACCClause *
C) {
4309 for (
const Stmt *Child :
C->children())
4310 TRY_TO(TraverseStmt(
const_cast<Stmt *
>(Child)));
4314template <
typename Derived>
4315bool RecursiveASTVisitor<Derived>::VisitOpenACCClauseList(
4318 for (
const auto *
C : Clauses)
4319 TRY_TO(VisitOpenACCClause(
C));
4324 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4326 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4328 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4330 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4332 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4334 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4336 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4338 if (S->hasDevNumExpr())
4339 TRY_TO(TraverseStmt(S->getDevNumExpr()));
4340 for (
auto *E : S->getQueueIdExprs())
4342 TRY_TO(VisitOpenACCClauseList(S->clauses()));
4345 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4347 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4349 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4351 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4353 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4355 for (
auto *E : S->getVarList())