1226 if (
T->getBaseType().getTypePtr() !=
T)
1227 TRY_TO(TraverseType(
T->getBaseType()));
1228 for (
auto typeArg :
T->getTypeArgsAsWritten()) {
1229 TRY_TO(TraverseType(typeArg));
1234 {
TRY_TO(TraverseType(
T->getPointeeType())); })
1242 {
TRY_TO(TraverseStmt(
T->getNumBitsExpr())); })
1256 template <
typename Derived> \
1257 bool RecursiveASTVisitor<Derived>::Traverse##
TYPE##Loc( \
1258 TYPE##Loc TL,
bool TraverseQualifier) { \
1259 if (!getDerived().shouldTraversePostOrder()) { \
1260 TRY_TO(WalkUpFrom##
TYPE##Loc(TL)); \
1261 if (getDerived().shouldWalkTypesOfTypeLocs()) \
1262 TRY_TO(WalkUpFrom##
TYPE(
const_cast<TYPE *
>(TL.getTypePtr()))); \
1267 if (getDerived().shouldTraversePostOrder()) { \
1268 TRY_TO(WalkUpFrom##
TYPE##Loc(TL)); \
1269 if (getDerived().shouldWalkTypesOfTypeLocs()) \
1270 TRY_TO(WalkUpFrom##
TYPE(
const_cast<TYPE *
>(TL.getTypePtr()))); \
1275template <
typename Derived>
1278 assert(TraverseQualifier &&
1279 "Qualifiers should never occur within NestedNameSpecifiers");
1295 return TraverseTypeLoc(TL.getUnqualifiedLoc());
1302 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1306 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1309 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1312 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1315 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1320 if (NestedNameSpecifierLoc QL = TL.getQualifierLoc())
1323 TRY_TO(TraverseNestedNameSpecifier(TL.getTypePtr()->getQualifier()));
1328 {
TRY_TO(TraverseTypeLoc(TL.getOriginalLoc())); })
1331 {
TRY_TO(TraverseTypeLoc(TL.getOriginalLoc())); })
1333template <typename Derived>
1334bool RecursiveASTVisitor<Derived>::TraverseArrayTypeLocHelper(
ArrayTypeLoc TL) {
1336 TRY_TO(TraverseStmt(TL.getSizeExpr()));
1341 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1342 TRY_TO(TraverseArrayTypeLocHelper(TL));
1346 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1351 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1352 TRY_TO(TraverseArrayTypeLocHelper(TL));
1356 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1357 TRY_TO(TraverseArrayTypeLocHelper(TL));
1361 TRY_TO(TraverseTypeLoc(TL.getElementLoc()));
1362 TRY_TO(TraverseArrayTypeLocHelper(TL));
1366 TRY_TO(TraverseStmt(TL.getTypePtr()->getAddrSpaceExpr()));
1367 TRY_TO(TraverseType(TL.getTypePtr()->getPointeeType()));
1373 if (TL.getTypePtr()->getSizeExpr())
1374 TRY_TO(TraverseStmt(TL.getTypePtr()->getSizeExpr()));
1375 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1380 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1384 if (TL.getTypePtr()->getSizeExpr())
1385 TRY_TO(TraverseStmt(TL.getTypePtr()->getSizeExpr()));
1386 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1392 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1396 TRY_TO(TraverseStmt(TL.getAttrRowOperand()));
1397 TRY_TO(TraverseStmt(TL.getAttrColumnOperand()));
1398 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1402 TRY_TO(TraverseStmt(TL.getAttrRowOperand()));
1403 TRY_TO(TraverseStmt(TL.getAttrColumnOperand()));
1404 TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
1408 {
TRY_TO(TraverseTypeLoc(TL.getReturnLoc())); })
1412 TRY_TO(TraverseTypeLoc(TL.getReturnLoc()));
1416 for (
unsigned I = 0, E = TL.getNumParams(); I != E; ++I) {
1417 if (TL.getParam(I)) {
1418 TRY_TO(TraverseDecl(TL.getParam(I)));
1419 }
else if (I < T->getNumParams()) {
1420 TRY_TO(TraverseType(
T->getParamType(I)));
1424 for (
const auto &E : T->exceptions()) {
1428 if (
Expr *NE =
T->getNoexceptExpr())
1429 TRY_TO(TraverseStmt(NE));
1434 TraverseQualifier && QualifierLoc)
1438 if (NestedNameSpecifierLoc QualifierLoc = TL.getQualifierLoc();
1439 TraverseQualifier && QualifierLoc)
1444 TraverseQualifier && QualifierLoc)
1449 {
TRY_TO(TraverseStmt(TL.getUnderlyingExpr())); })
1452 TRY_TO(TraverseTypeLoc(TL.getUnmodifiedTInfo()->getTypeLoc()));
1457 TRY_TO(TraverseStmt(TL.getTypePtr()->getUnderlyingExpr()));
1461 TRY_TO(TraverseType(TL.getPattern()));
1462 TRY_TO(TraverseStmt(TL.getTypePtr()->getIndexExpr()));
1466 TRY_TO(TraverseTypeLoc(TL.getUnderlyingTInfo()->getTypeLoc()));
1470 TRY_TO(TraverseType(TL.getTypePtr()->getDeducedType()));
1471 if (TL.isConstrained()) {
1472 TRY_TO(TraverseConceptReference(TL.getConceptReference()));
1478 TRY_TO(TraverseType(TL.getTypePtr()->getReplacementType()));
1481template <typename Derived>
1482bool RecursiveASTVisitor<Derived>::TraverseSubstPackTypeLocHelper(
1484 TRY_TO(TraverseTemplateArgument(TL.getTypePtr()->getArgumentPack()));
1488template <
typename Derived>
1489bool RecursiveASTVisitor<Derived>::TraverseSubstPackTypeHelper(
1491 TRY_TO(TraverseTemplateArgument(
T->getArgumentPack()));
1496 {
TRY_TO(TraverseSubstPackTypeLocHelper(TL)); })
1499 {
TRY_TO(TraverseSubstPackTypeLocHelper(TL)); })
1504 {
TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
1507 {
TRY_TO(TraverseTypeLoc(TL.getModifiedLoc())); })
1510 {
TRY_TO(TraverseTypeLoc(TL.getInnerLoc())); })
1513 {
TRY_TO(TraverseTypeLoc(TL.getWrappedLoc())); })
1516 {
TRY_TO(TraverseTypeLoc(TL.getWrappedLoc())); })
1519 {
TRY_TO(TraverseType(TL.getType())); })
1521template <typename Derived>
1522bool RecursiveASTVisitor<Derived>::TraverseTagTypeLoc(TagTypeLoc TL,
1523 bool TraverseQualifier) {
1524 if (NestedNameSpecifierLoc QualifierLoc = TL.getQualifierLoc();
1525 TraverseQualifier && QualifierLoc)
1531 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1533 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1535 {
TRY_TO(TraverseTagTypeLoc(TL, TraverseQualifier)); })
1538 if (TraverseQualifier)
1543 if (TraverseQualifier)
1547 TRY_TO(TraverseTemplateName(
1548 TemplateName(TL.getTypePtr()->getTemplateName().getAsTemplateDecl(
1551 for (
unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) {
1552 TRY_TO(TraverseTemplateArgumentLoc(TL.getArgLoc(I)));
1557 if (TraverseQualifier)
1560 const auto *T = TL.getTypePtr();
1563 TraverseTemplateName(
TemplateName(
T->getTemplateName().getAsTemplateDecl(
1570 {
TRY_TO(TraverseTypeLoc(TL.getPatternLoc())); })
1573 for (
unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
1574 ObjCProtocolLoc ProtocolLoc(TL.getProtocol(I), TL.getProtocolLoc(I));
1575 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1584 if (TL.getTypePtr()->getBaseType().getTypePtr() != TL.getTypePtr())
1585 TRY_TO(TraverseTypeLoc(TL.getBaseLoc()));
1586 for (
unsigned i = 0, n = TL.getNumTypeArgs(); i != n; ++i)
1587 TRY_TO(TraverseTypeLoc(TL.getTypeArgTInfo(i)->getTypeLoc()));
1588 for (
unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
1590 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1595 {
TRY_TO(TraverseTypeLoc(TL.getPointeeLoc())); })
1603 TRY_TO(TraverseStmt(TL.getTypePtr()->getNumBitsExpr()));
1617template <typename Derived>
1619 const Decl *Child) {
1625 if (
const CXXRecordDecl* Cls = dyn_cast<CXXRecordDecl>(Child))
1626 return Cls->isLambda();
1630template <
typename Derived>
1631bool RecursiveASTVisitor<Derived>::TraverseDeclContextHelper(
DeclContext *DC) {
1635 for (
auto *Child : DC->decls()) {
1636 if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
1637 TRY_TO(TraverseDecl(Child));
1644#define DEF_TRAVERSE_DECL(DECL, CODE) \
1645 template <typename Derived> \
1646 bool RecursiveASTVisitor<Derived>::Traverse##DECL(DECL *D) { \
1647 bool ShouldVisitChildren = true; \
1648 bool ReturnValue = true; \
1649 if (!getDerived().shouldTraversePostOrder()) \
1650 TRY_TO(WalkUpFrom##DECL(D)); \
1652 if (ReturnValue && ShouldVisitChildren) \
1653 TRY_TO(TraverseDeclContextHelper(dyn_cast<DeclContext>(D))); \
1654 if (ReturnValue) { \
1656 for (auto *I : D->attrs()) \
1657 TRY_TO(getDerived().TraverseAttr(I)); \
1659 if (ReturnValue && getDerived().shouldTraversePostOrder()) \
1660 TRY_TO(WalkUpFrom##DECL(D)); \
1661 return ReturnValue; \
1668 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
1669 TRY_TO(TraverseStmt(D->getBody()));
1670 for (
const auto &I : D->captures()) {
1671 if (I.hasCopyExpr()) {
1672 TRY_TO(TraverseStmt(I.getCopyExpr()));
1675 ShouldVisitChildren =
false;
1679 TRY_TO(TraverseStmt(D->getBody()));
1680 ShouldVisitChildren =
false;
1684 TRY_TO(TraverseStmt(D->getBody()));
1685 ShouldVisitChildren =
false;
1695 TRY_TO(TraverseStmt(D->getTemporaryExpr()));
1699 {
TRY_TO(TraverseStmt(D->getAsmStringExpr())); })
1707 if (D->getFriendType()) {
1708 TRY_TO(TraverseTypeLoc(D->getFriendType()->getTypeLoc()));
1711 if (
auto *TT = D->getFriendType()->getType()->getAs<TagType>();
1712 TT && TT->isTagOwned())
1713 TRY_TO(TraverseDecl(TT->getDecl()));
1715 TRY_TO(TraverseDecl(D->getFriendDecl()));
1720 if (D->getFriendType())
1721 TRY_TO(TraverseTypeLoc(D->getFriendType()->getTypeLoc()));
1723 TRY_TO(TraverseDecl(D->getFriendDecl()));
1724 for (
unsigned I = 0, E = D->getNumTemplateParameters(); I < E; ++I) {
1727 ITPL != ETPL; ++ITPL) {
1728 TRY_TO(TraverseDecl(*ITPL));
1741 TRY_TO(TraverseStmt(D->getAssertExpr()));
1742 TRY_TO(TraverseStmt(D->getMessage()));
1752 auto Scope = D->getASTContext().getTraversalScope();
1753 bool HasLimitedScope =
1755 if (HasLimitedScope) {
1756 ShouldVisitChildren =
false;
1757 for (
auto *Child :
Scope) {
1758 if (!canIgnoreChildDeclWhileTraversingDeclContext(Child))
1759 TRY_TO(TraverseDecl(Child));
1775 ShouldVisitChildren =
false;
1793 for (
auto typeParam : *typeParamList) {
1794 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1797 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1799 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1811 for (
auto typeParam : *typeParamList) {
1812 TRY_TO(TraverseObjCTypeParamDecl(typeParam));
1817 TRY_TO(TraverseTypeLoc(superTInfo->getTypeLoc()));
1819 if (D->isThisDeclarationADefinition()) {
1820 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1822 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1828 if (D->isThisDeclarationADefinition()) {
1829 for (
auto It : llvm::zip(D->protocols(), D->protocol_locs())) {
1831 TRY_TO(TraverseObjCProtocolLoc(ProtocolLoc));
1837 if (D->getReturnTypeSourceInfo()) {
1838 TRY_TO(TraverseTypeLoc(D->getReturnTypeSourceInfo()->getTypeLoc()));
1843 if (D->isThisDeclarationADefinition()) {
1844 TRY_TO(TraverseStmt(D->getBody()));
1846 ShouldVisitChildren =
false;
1850 if (D->hasExplicitBound()) {
1851 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1859 if (D->getTypeSourceInfo())
1860 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
1862 TRY_TO(TraverseType(D->getType()));
1863 ShouldVisitChildren =
false;
1868 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
1872 {
TRY_TO(TraverseTypeLoc(D->getEnumTypeLoc())); })
1885 for (
auto *I : D->varlist()) {
1891 for (
auto *I : D->varlist()) {
1897 for (
auto *
C : D->clauselists()) {
1903 TRY_TO(TraverseStmt(D->getCombiner()));
1906 TRY_TO(TraverseType(D->getType()));
1911 for (
auto *
C : D->clauselists())
1913 TRY_TO(TraverseType(D->getType()));
1920 for (
auto *I : D->varlist())
1922 for (
auto *
C : D->clauselists())
1927 {
TRY_TO(VisitOpenACCClauseList(D->clauses())); })
1930 TRY_TO(TraverseStmt(D->getFunctionReference()));
1931 TRY_TO(VisitOpenACCClauseList(D->clauses()));
1935template <typename Derived>
1936bool RecursiveASTVisitor<Derived>::TraverseTemplateParameterListHelper(
1942 if (
Expr *RequiresClause = TPL->getRequiresClause()) {
1943 TRY_TO(TraverseStmt(RequiresClause));
1949template <
typename Derived>
1950template <
typename T>
1951bool RecursiveASTVisitor<Derived>::TraverseDeclTemplateParameterLists(
T *D) {
1952 for (
unsigned i = 0; i < D->getNumTemplateParameterLists(); i++) {
1954 TraverseTemplateParameterListHelper(TPL);
1959template <
typename Derived>
1962 for (
auto *SD : D->specializations()) {
1963 for (
auto *RD : SD->redecls()) {
1970 TRY_TO(TraverseDecl(RD));
1987template <
typename Derived>
1990 for (
auto *SD : D->specializations()) {
1991 for (
auto *RD : SD->redecls()) {
1996 TRY_TO(TraverseDecl(RD));
2012template <
typename Derived>
2015 for (
auto *FD : D->specializations()) {
2016 for (
auto *RD : FD->redecls()) {
2017 switch (RD->getTemplateSpecializationKind()) {
2021 TRY_TO(TraverseDecl(RD));
2028 TRY_TO(TraverseDecl(RD));
2042#define DEF_TRAVERSE_TMPL_DECL(TMPLDECLKIND) \
2043 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateDecl, { \
2044 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2045 TRY_TO(TraverseDecl(D->getTemplatedDecl())); \
2053 if (getDerived().shouldVisitTemplateInstantiations() && \
2054 D == D->getCanonicalDecl()) \
2055 TRY_TO(TraverseTemplateInstantiations(D)); \
2069 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2070 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2071 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2072 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2076 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2079template <typename Derived>
2080bool RecursiveASTVisitor<Derived>::TraverseTemplateTypeParamDeclConstraints(
2082 if (
const auto *TC = D->getTypeConstraint())
2083 TRY_TO(TraverseTypeConstraint(TC));
2089 if (D->getTypeForDecl())
2091 TRY_TO(TraverseTemplateTypeParamDeclConstraints(D));
2092 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2093 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2097 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2104 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2111 TRY_TO(TraverseDecl(D->getTemplatedDecl()));
2112 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2116 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters()));
2117 TRY_TO(TraverseStmt(D->getConstraintExpr()));
2132 TRY_TO(TraverseDeclTemplateParameterLists(D));
2135 if (
auto *TSI = D->getIntegerTypeSourceInfo())
2136 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2142template <typename Derived>
2143bool RecursiveASTVisitor<Derived>::TraverseRecordHelper(
RecordDecl *D) {
2147 TRY_TO(TraverseDeclTemplateParameterLists(D));
2152template <
typename Derived>
2155 TRY_TO(TraverseTypeLoc(
Base.getTypeSourceInfo()->getTypeLoc()));
2159template <
typename Derived>
2160bool RecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(
CXXRecordDecl *D) {
2161 if (!TraverseRecordHelper(D))
2163 if (D->isCompleteDefinition()) {
2164 for (
const auto &I : D->bases()) {
2165 TRY_TO(TraverseCXXBaseSpecifier(I));
2177template <typename Derived>
2178bool RecursiveASTVisitor<Derived>::TraverseTemplateArgumentLocsHelper(
2180 for (
unsigned I = 0; I < Count; ++I) {
2181 TRY_TO(TraverseTemplateArgumentLoc(TAL[I]));
2186#define DEF_TRAVERSE_TMPL_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2187 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplateSpecializationDecl, { \
2196 if (const auto *ArgsWritten = D->getTemplateArgsAsWritten()) { \
2197 assert(D->getTemplateSpecializationKind() != TSK_ImplicitInstantiation); \
2199 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2200 ArgsWritten->getTemplateArgs(), ArgsWritten->NumTemplateArgs)); \
2203 if (getDerived().shouldVisitTemplateInstantiations() || \
2204 D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) { \
2206 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2208 TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc())); \
2221#define DEF_TRAVERSE_TMPL_PART_SPEC_DECL(TMPLDECLKIND, DECLKIND) \
2222 DEF_TRAVERSE_DECL(TMPLDECLKIND##TemplatePartialSpecializationDecl, { \
2224 TRY_TO(TraverseTemplateParameterListHelper(D->getTemplateParameters())); \
2226 TRY_TO(TraverseTemplateArgumentLocsHelper( \
2227 D->getTemplateArgsAsWritten()->getTemplateArgs(), \
2228 D->getTemplateArgsAsWritten()->NumTemplateArgs)); \
2233 TRY_TO(Traverse##DECLKIND##Helper(D)); \
2247 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2252template <typename Derived>
2253bool RecursiveASTVisitor<Derived>::TraverseDeclaratorHelper(
DeclaratorDecl *D) {
2254 TRY_TO(TraverseDeclTemplateParameterLists(D));
2256 if (D->getTypeSourceInfo())
2257 TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
2259 TRY_TO(TraverseType(D->getType()));
2264 TRY_TO(TraverseVarHelper(D));
2265 for (
auto *Binding : D->bindings()) {
2266 TRY_TO(TraverseDecl(Binding));
2271 if (getDerived().shouldVisitImplicitCode()) {
2272 TRY_TO(TraverseStmt(D->getBinding()));
2273 if (
const auto HoldingVar = D->getHoldingVar())
2274 TRY_TO(TraverseDecl(HoldingVar));
2286 TRY_TO(TraverseDeclaratorHelper(D));
2287 if (D->isBitField())
2288 TRY_TO(TraverseStmt(D->getBitWidth()));
2289 if (D->hasInClassInitializer())
2290 TRY_TO(TraverseStmt(D->getInClassInitializer()));
2294 TRY_TO(TraverseDeclaratorHelper(D));
2295 if (D->isBitField())
2296 TRY_TO(TraverseStmt(D->getBitWidth()));
2301 TRY_TO(TraverseDeclaratorHelper(D));
2302 if (D->isBitField())
2303 TRY_TO(TraverseStmt(D->getBitWidth()));
2307template <typename Derived>
2308bool RecursiveASTVisitor<Derived>::TraverseFunctionHelper(
FunctionDecl *D) {
2309 TRY_TO(TraverseDeclTemplateParameterLists(D));
2311 TRY_TO(TraverseDeclarationNameInfo(D->getNameInfo()));
2319 D->getTemplateSpecializationInfo()) {
2325 FTSI->TemplateArgumentsAsWritten) {
2326 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2327 TALI->NumTemplateArgs));
2331 D->getDependentSpecializationInfo()) {
2333 DFSI->TemplateArgumentsAsWritten) {
2334 TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getTemplateArgs(),
2335 TALI->NumTemplateArgs));
2344 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2345 }
else if (getDerived().shouldVisitImplicitCode()) {
2357 D->getTrailingRequiresClause()) {
2359 const_cast<Expr *
>(TrailingRequiresClause.ConstraintExpr)));
2364 for (
auto *I : Ctor->inits()) {
2365 if (I->isWritten() || getDerived().shouldVisitImplicitCode())
2366 TRY_TO(TraverseConstructorInitializer(I));
2371 D->isThisDeclarationADefinition() &&
2374 (!D->isDefaulted() || getDerived().shouldVisitImplicitCode());
2376 if (
const auto *MD = dyn_cast<CXXMethodDecl>(D)) {
2378 if (RD->isLambda() &&
2380 VisitBody = VisitBody && getDerived().shouldVisitLambdaBody();
2386 TRY_TO(TraverseStmt(D->getBody()));
2389 for (
auto *Child : D->decls()) {
2391 TRY_TO(TraverseDecl(Child));
2400 ShouldVisitChildren =
false;
2407 ShouldVisitChildren =
false;
2414 ShouldVisitChildren =
false;
2421 ShouldVisitChildren =
false;
2430 ShouldVisitChildren =
false;
2437 ShouldVisitChildren =
false;
2441template <typename Derived>
2442bool RecursiveASTVisitor<Derived>::TraverseVarHelper(
VarDecl *D) {
2443 TRY_TO(TraverseDeclaratorHelper(D));
2446 (!D->isCXXForRangeDecl() || getDerived().shouldVisitImplicitCode()))
2447 TRY_TO(TraverseStmt(D->getInit()));
2457 TRY_TO(TraverseDeclaratorHelper(D));
2458 if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
2459 TRY_TO(TraverseTemplateArgumentLoc(D->getDefaultArgument()));
2463 TRY_TO(TraverseVarHelper(D));
2465 if (D->hasDefaultArg() && D->hasUninstantiatedDefaultArg() &&
2466 !D->hasUnparsedDefaultArg())
2467 TRY_TO(TraverseStmt(D->getUninstantiatedDefaultArg()));
2469 if (D->hasDefaultArg() && !D->hasUninstantiatedDefaultArg() &&
2470 !D->hasUnparsedDefaultArg())
2471 TRY_TO(TraverseStmt(D->getDefaultArg()));
2477 TRY_TO(TraverseTemplateArguments(D->getTemplateArguments()));
2493 template <
typename Derived> \
2495 STMT *S, DataRecursionQueue *Queue) { \
2496 bool ShouldVisitChildren =
true; \
2498 if (!getDerived().shouldTraversePostOrder()) \
2499 TRY_TO(WalkUpFrom##
STMT(S)); \
2501 if (ShouldVisitChildren) { \
2502 for (
Stmt * SubStmt : getDerived().getStmtChildren(S)) { \
2503 TRY_TO_TRAVERSE_OR_ENQUEUE_STMT(SubStmt); \
2510 if (!Queue && ReturnValue && getDerived().shouldTraversePostOrder()) { \
2511 TRY_TO(WalkUpFrom##
STMT(S)); \
2518 for (
unsigned I = 0, E = S->getNumInputs(); I < E; ++I) {
2521 for (
unsigned I = 0, E = S->getNumOutputs(); I < E; ++I) {
2524 for (
unsigned I = 0, E = S->getNumClobbers(); I < E; ++I) {
2537 TRY_TO(TraverseDecl(S->getExceptionDecl()));
2542 for (
auto *I : S->decls()) {
2550 ShouldVisitChildren =
false;
2579 if (!getDerived().shouldVisitImplicitCode()) {
2586 ShouldVisitChildren =
false;
2592 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2603 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2604 if (S->hasExplicitTemplateArgs()) {
2605 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2606 S->getNumTemplateArgs()));
2612 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2613 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2614 S->getNumTemplateArgs()));
2619 TRY_TO(TraverseDeclarationNameInfo(S->getNameInfo()));
2620 if (S->hasExplicitTemplateArgs()) {
2621 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2622 S->getNumTemplateArgs()));
2628 TRY_TO(TraverseDeclarationNameInfo(S->getMemberNameInfo()));
2629 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
2630 S->getNumTemplateArgs()));
2640 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2644 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2648 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2652 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2656 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2660 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2664 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2668 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2671template <typename Derived>
2677 if (!getDerived().shouldTraversePostOrder())
2678 TRY_TO(WalkUpFromInitListExpr(S));
2685 if (!Queue && getDerived().shouldTraversePostOrder())
2686 TRY_TO(WalkUpFromInitListExpr(S));
2691template <
typename Derived>
2697template <
typename Derived>
2700 if (!getDerived().shouldTraversePostOrder())
2701 TRY_TO(VisitConceptReference(CR));
2703 TRY_TO(TraverseDeclarationNameInfo(CR->getConceptNameInfo()));
2704 if (CR->hasExplicitTemplateArgs())
2705 TRY_TO(TraverseTemplateArgumentLocsHelper(
2706 CR->getTemplateArgsAsWritten()->getTemplateArgs(),
2707 CR->getTemplateArgsAsWritten()->NumTemplateArgs));
2708 if (getDerived().shouldTraversePostOrder())
2709 TRY_TO(VisitConceptReference(CR));
2721template <
typename Derived>
2724 if (S->isSemanticForm() && S->isSyntacticForm()) {
2726 TRY_TO(TraverseSynOrSemInitListExpr(S, Queue));
2729 TRY_TO(TraverseSynOrSemInitListExpr(
2730 S->isSemanticForm() ? S->getSyntacticForm() : S, Queue));
2731 if (getDerived().shouldVisitImplicitCode()) {
2734 TRY_TO(TraverseSynOrSemInitListExpr(
2735 S->isSemanticForm() ? S : S->getSemanticForm(), Queue));
2744 if (S->isExprPredicate())
2745 TRY_TO(TraverseStmt(S->getControllingExpr()));
2747 TRY_TO(TraverseTypeLoc(S->getControllingType()->getTypeLoc()));
2751 TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
2754 ShouldVisitChildren =
false;
2762 e = S->semantics_end();
2766 sub = OVE->getSourceExpr();
2769 ShouldVisitChildren =
false;
2775 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2780 TRY_TO(TraverseTypeLoc(S->getAllocatedTypeSourceInfo()->getTypeLoc()));
2788 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2794 if (S->isArgumentType())
2795 TRY_TO(TraverseTypeLoc(S->getArgumentTypeInfo()->getTypeLoc()));
2801 if (S->isTypeOperand())
2802 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2814 if (S->isTypeOperand())
2815 TRY_TO(TraverseTypeLoc(S->getTypeOperandSourceInfo()->getTypeLoc()));
2819 for (
unsigned I = 0, N = S->getNumArgs(); I != N; ++I)
2820 TRY_TO(TraverseTypeLoc(S->getArg(I)->getTypeLoc()));
2824 TRY_TO(TraverseTypeLoc(S->getQueriedTypeSourceInfo()->getTypeLoc()));
2832 TRY_TO(TraverseTypeLoc(S->getWrittenTypeInfo()->getTypeLoc()));
2837 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2843 for (
unsigned I = 0, N = S->capture_size(); I != N; ++I) {
2845 if (
C->isExplicit() || getDerived().shouldVisitImplicitCode()) {
2846 TRY_TO(TraverseLambdaCapture(S,
C, S->capture_init_begin()[I]));
2850 if (getDerived().shouldVisitImplicitCode()) {
2852 TRY_TO(TraverseDecl(S->getLambdaClass()));
2855 TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
2858 TRY_TO(TraverseTemplateParameterListHelper(S->getTemplateParameterList()));
2859 if (S->hasExplicitParameters()) {
2861 for (
unsigned I = 0, N = Proto.getNumParams(); I != N; ++I)
2862 TRY_TO(TraverseDecl(Proto.getParam(I)));
2865 auto *
T = Proto.getTypePtr();
2866 for (
const auto &E :
T->exceptions())
2869 if (
Expr *NE =
T->getNoexceptExpr())
2872 if (S->hasExplicitResultType())
2873 TRY_TO(TraverseTypeLoc(Proto.getReturnLoc()));
2875 const_cast<Expr *
>(S->getTrailingRequiresClause().ConstraintExpr));
2879 ShouldVisitChildren =
false;
2884 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2904 TRY_TO(TraverseDecl(S->getBlockDecl()));
2910 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
2916 if (getDerived().shouldVisitImplicitCode())
2917 TRY_TO(TraverseStmt(S->getExpr()));
2921 if (getDerived().shouldVisitImplicitCode())
2922 TRY_TO(TraverseStmt(S->getExpr()));
2934 TRY_TO(TraverseTypeLoc(ScopeInfo->getTypeLoc()));
2935 if (
TypeSourceInfo *DestroyedTypeInfo = S->getDestroyedTypeInfo())
2936 TRY_TO(TraverseTypeLoc(DestroyedTypeInfo->getTypeLoc()));
2959 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
2967 TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc()));
2971 if (S->isClassReceiver()) {
2973 QualType Type = IDecl->getASTContext().getObjCInterfaceType(IDecl);
2975 Data.NameLoc = S->getReceiverLocation();
2986 TRY_TO(TraverseTypeLoc(S->getTypeInfoAsWritten()->getTypeLoc()));
2993 TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc()));
3009 if (S->hasExplicitTemplateArgs()) {
3010 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3011 S->getNumTemplateArgs()));
3017 if (S->hasExplicitTemplateArgs()) {
3018 TRY_TO(TraverseTemplateArgumentLocsHelper(S->getTemplateArgs(),
3019 S->getNumTemplateArgs()));
3030 if (getDerived().shouldVisitImplicitCode()) {
3031 TRY_TO(TraverseStmt(S->getOriginalStmt()));
3032 TRY_TO(TraverseDecl(S->getOutlinedFunctionDecl()));
3033 ShouldVisitChildren =
false;
3039 if (!getDerived().shouldVisitImplicitCode()) {
3041 S->getDecomposedForm();
3042 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.LHS)));
3043 TRY_TO(TraverseStmt(
const_cast<Expr*
>(Decomposed.RHS)));
3044 ShouldVisitChildren =
false;
3070 if (S->getLifetimeExtendedTemporaryDecl()) {
3071 TRY_TO(TraverseLifetimeExtendedTemporaryDecl(
3072 S->getLifetimeExtendedTemporaryDecl()));
3073 ShouldVisitChildren =
false;
3080 if (!getDerived().shouldVisitImplicitCode()) {
3082 ShouldVisitChildren =
false;
3086 if (!getDerived().shouldVisitImplicitCode()) {
3088 ShouldVisitChildren =
false;
3092 if (!getDerived().shouldVisitImplicitCode()) {
3094 ShouldVisitChildren =
false;
3098 if (!getDerived().shouldVisitImplicitCode()) {
3100 ShouldVisitChildren =
false;
3104 if (!getDerived().shouldVisitImplicitCode()) {
3106 ShouldVisitChildren =
false;
3111 TRY_TO(TraverseConceptReference(S->getConceptReference()));
3115 TRY_TO(TraverseDecl(S->getBody()));
3117 TRY_TO(TraverseDecl(Parm));
3119 TRY_TO(TraverseConceptRequirement(Req));
3138template <typename Derived>
3139bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
3140 OMPExecutableDirective *S) {
3141 for (
auto *
C : S->clauses()) {
3148 if (!getDerived().shouldVisitImplicitCode()) {
3150 TRY_TO(TraverseStmt(S->getLoopStmt()));
3151 ShouldVisitChildren =
false;
3155template <typename Derived>
3157RecursiveASTVisitor<Derived>::TraverseOMPLoopDirective(OMPLoopDirective *S) {
3158 return TraverseOMPExecutableDirective(S);
3162 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3165 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3168 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3171 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3174 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3177 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3180 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3183 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3186 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3189 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3192 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3195 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3198 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3201 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3204 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3207 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3210 TRY_TO(TraverseDeclarationNameInfo(S->getDirectiveName()));
3211 TRY_TO(TraverseOMPExecutableDirective(S));
3215 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3218 {
TRY_TO(TraverseOMPExecutableDirective(S)); })
3221 {
TRY_TO(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(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)); })
3395template <typename Derived>
3396bool RecursiveASTVisitor<Derived>::TraverseOMPClause(
OMPClause *
C) {
3399 switch (
C->getClauseKind()) {
3400#define GEN_CLANG_CLAUSE_CLASS
3401#define CLAUSE_CLASS(Enum, Str, Class) \
3402 case llvm::omp::Clause::Enum: \
3403 TRY_TO(Visit##Class(static_cast<Class *>(C))); \
3405#define CLAUSE_NO_CLASS(Enum, Str) \
3406 case llvm::omp::Clause::Enum: \
3408#include "llvm/Frontend/OpenMP/OMP.inc"
3413template <
typename Derived>
3414bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPreInit(
3416 TRY_TO(TraverseStmt(Node->getPreInitStmt()));
3420template <
typename Derived>
3421bool RecursiveASTVisitor<Derived>::VisitOMPClauseWithPostUpdate(
3423 TRY_TO(VisitOMPClauseWithPreInit(Node));
3424 TRY_TO(TraverseStmt(Node->getPostUpdateExpr()));
3428template <
typename Derived>
3431 TRY_TO(TraverseStmt(
C->getAllocator()));
3435template <
typename Derived>
3437 TRY_TO(TraverseStmt(
C->getAllocator()));
3438 TRY_TO(VisitOMPClauseList(
C));
3442template <
typename Derived>
3444 TRY_TO(VisitOMPClauseWithPreInit(
C));
3445 TRY_TO(TraverseStmt(
C->getCondition()));
3449template <
typename Derived>
3451 TRY_TO(VisitOMPClauseWithPreInit(
C));
3452 TRY_TO(TraverseStmt(
C->getCondition()));
3456template <
typename Derived>
3459 TRY_TO(VisitOMPClauseWithPreInit(
C));
3460 TRY_TO(TraverseStmt(
C->getNumThreads()));
3464template <
typename Derived>
3466 TRY_TO(TraverseStmt(
C->getAlignment()));
3470template <
typename Derived>
3472 TRY_TO(TraverseStmt(
C->getSafelen()));
3476template <
typename Derived>
3478 TRY_TO(TraverseStmt(
C->getSimdlen()));
3482template <
typename Derived>
3484 for (
Expr *E :
C->getSizesRefs())
3489template <
typename Derived>
3492 for (
Expr *E :
C->getArgsRefs())
3497template <
typename Derived>
3502template <
typename Derived>
3505 TRY_TO(TraverseStmt(
C->getFirst()));
3506 TRY_TO(TraverseStmt(
C->getCount()));
3510template <
typename Derived>
3512 TRY_TO(TraverseStmt(
C->getFactor()));
3516template <
typename Derived>
3519 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3523template <
typename Derived>
3528template <
typename Derived>
3534template <
typename Derived>
3536 OMPTransparentClause *
C) {
3537 TRY_TO(TraverseStmt(
C->getImpexType()));
3541template <
typename Derived>
3546template <
typename Derived>
3548 OMPUnifiedAddressClause *) {
3552template <
typename Derived>
3554 OMPUnifiedSharedMemoryClause *) {
3558template <
typename Derived>
3560 OMPReverseOffloadClause *) {
3564template <
typename Derived>
3566 OMPDynamicAllocatorsClause *) {
3570template <
typename Derived>
3572 OMPAtomicDefaultMemOrderClause *) {
3576template <
typename Derived>
3581template <
typename Derived>
3586template <
typename Derived>
3591template <
typename Derived>
3593 TRY_TO(TraverseStmt(
C->getMessageString()));
3597template <
typename Derived>
3600 TRY_TO(VisitOMPClauseWithPreInit(
C));
3601 TRY_TO(TraverseStmt(
C->getChunkSize()));
3605template <
typename Derived>
3607 TRY_TO(TraverseStmt(
C->getNumForLoops()));
3611template <
typename Derived>
3613 TRY_TO(TraverseStmt(
C->getCondition()));
3617template <
typename Derived>
3622template <
typename Derived>
3628template <
typename Derived>
3633template <
typename Derived>
3638template <
typename Derived>
3643template <
typename Derived>
3648template <
typename Derived>
3653template <
typename Derived>
3658template <
typename Derived>
3663template <
typename Derived>
3668template <
typename Derived>
3673template <
typename Derived>
3678template <
typename Derived>
3683template <
typename Derived>
3688template <
typename Derived>
3690 OMPNoOpenMPRoutinesClause *) {
3694template <
typename Derived>
3696 OMPNoOpenMPConstructsClause *) {
3700template <
typename Derived>
3702 OMPNoParallelismClause *) {
3706template <
typename Derived>
3711template <
typename Derived>
3716template <
typename Derived>
3721template <
typename Derived>
3726template <
typename Derived>
3731template <
typename Derived>
3736template <
typename Derived>
3741template <
typename Derived>
3743 TRY_TO(VisitOMPClauseList(
C));
3747template <
typename Derived>
3749 TRY_TO(TraverseStmt(
C->getInteropVar()));
3753template <
typename Derived>
3755 TRY_TO(TraverseStmt(
C->getInteropVar()));
3759template <
typename Derived>
3761 OMPNovariantsClause *
C) {
3762 TRY_TO(VisitOMPClauseWithPreInit(
C));
3763 TRY_TO(TraverseStmt(
C->getCondition()));
3767template <
typename Derived>
3769 OMPNocontextClause *
C) {
3770 TRY_TO(VisitOMPClauseWithPreInit(
C));
3771 TRY_TO(TraverseStmt(
C->getCondition()));
3775template <
typename Derived>
3776template <
typename T>
3777bool RecursiveASTVisitor<Derived>::VisitOMPClauseList(
T *Node) {
3778 for (
auto *E : Node->varlist()) {
3784template <
typename Derived>
3786 OMPInclusiveClause *
C) {
3787 TRY_TO(VisitOMPClauseList(
C));
3791template <
typename Derived>
3793 OMPExclusiveClause *
C) {
3794 TRY_TO(VisitOMPClauseList(
C));
3798template <
typename Derived>
3800 TRY_TO(VisitOMPClauseList(
C));
3801 for (
auto *E :
C->private_copies()) {
3807template <
typename Derived>
3809 OMPFirstprivateClause *
C) {
3810 TRY_TO(VisitOMPClauseList(
C));
3811 TRY_TO(VisitOMPClauseWithPreInit(
C));
3812 for (
auto *E :
C->private_copies()) {
3815 for (
auto *E :
C->inits()) {
3821template <
typename Derived>
3823 OMPLastprivateClause *
C) {
3824 TRY_TO(VisitOMPClauseList(
C));
3825 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3826 for (
auto *E :
C->private_copies()) {
3829 for (
auto *E :
C->source_exprs()) {
3832 for (
auto *E :
C->destination_exprs()) {
3835 for (
auto *E :
C->assignment_ops()) {
3841template <
typename Derived>
3843 TRY_TO(VisitOMPClauseList(
C));
3847template <
typename Derived>
3849 TRY_TO(TraverseStmt(
C->getStep()));
3850 TRY_TO(TraverseStmt(
C->getCalcStep()));
3851 TRY_TO(VisitOMPClauseList(
C));
3852 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3853 for (
auto *E :
C->privates()) {
3856 for (
auto *E :
C->inits()) {
3859 for (
auto *E :
C->updates()) {
3862 for (
auto *E :
C->finals()) {
3868template <
typename Derived>
3870 TRY_TO(TraverseStmt(
C->getAlignment()));
3871 TRY_TO(VisitOMPClauseList(
C));
3875template <
typename Derived>
3877 TRY_TO(VisitOMPClauseList(
C));
3878 for (
auto *E :
C->source_exprs()) {
3881 for (
auto *E :
C->destination_exprs()) {
3884 for (
auto *E :
C->assignment_ops()) {
3890template <
typename Derived>
3892 OMPCopyprivateClause *
C) {
3893 TRY_TO(VisitOMPClauseList(
C));
3894 for (
auto *E :
C->source_exprs()) {
3897 for (
auto *E :
C->destination_exprs()) {
3900 for (
auto *E :
C->assignment_ops()) {
3906template <
typename Derived>
3910 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
3911 TRY_TO(VisitOMPClauseList(
C));
3912 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3913 for (
auto *E :
C->privates()) {
3916 for (
auto *E :
C->lhs_exprs()) {
3919 for (
auto *E :
C->rhs_exprs()) {
3922 for (
auto *E :
C->reduction_ops()) {
3925 if (
C->getModifier() == OMPC_REDUCTION_inscan) {
3926 for (
auto *E :
C->copy_ops()) {
3929 for (
auto *E :
C->copy_array_temps()) {
3932 for (
auto *E :
C->copy_array_elems()) {
3939template <
typename Derived>
3941 OMPTaskReductionClause *
C) {
3943 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
3944 TRY_TO(VisitOMPClauseList(
C));
3945 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3946 for (
auto *E :
C->privates()) {
3949 for (
auto *E :
C->lhs_exprs()) {
3952 for (
auto *E :
C->rhs_exprs()) {
3955 for (
auto *E :
C->reduction_ops()) {
3961template <
typename Derived>
3963 OMPInReductionClause *
C) {
3965 TRY_TO(TraverseDeclarationNameInfo(
C->getNameInfo()));
3966 TRY_TO(VisitOMPClauseList(
C));
3967 TRY_TO(VisitOMPClauseWithPostUpdate(
C));
3968 for (
auto *E :
C->privates()) {
3971 for (
auto *E :
C->lhs_exprs()) {
3974 for (
auto *E :
C->rhs_exprs()) {
3977 for (
auto *E :
C->reduction_ops()) {
3980 for (
auto *E :
C->taskgroup_descriptors())
3985template <
typename Derived>
3987 TRY_TO(VisitOMPClauseList(
C));
3991template <
typename Derived>
3993 TRY_TO(TraverseStmt(
C->getDepobj()));
3997template <
typename Derived>
3999 TRY_TO(VisitOMPClauseList(
C));
4003template <
typename Derived>
4005 TRY_TO(VisitOMPClauseWithPreInit(
C));
4006 TRY_TO(TraverseStmt(
C->getDevice()));
4010template <
typename Derived>
4012 TRY_TO(VisitOMPClauseList(
C));
4016template <
typename Derived>
4018 OMPNumTeamsClause *
C) {
4019 TRY_TO(VisitOMPClauseList(
C));
4020 TRY_TO(VisitOMPClauseWithPreInit(
C));
4024template <
typename Derived>
4026 OMPThreadLimitClause *
C) {
4027 TRY_TO(VisitOMPClauseList(
C));
4028 TRY_TO(VisitOMPClauseWithPreInit(
C));
4032template <
typename Derived>
4034 OMPPriorityClause *
C) {
4035 TRY_TO(VisitOMPClauseWithPreInit(
C));
4036 TRY_TO(TraverseStmt(
C->getPriority()));
4040template <
typename Derived>
4042 OMPGrainsizeClause *
C) {
4043 TRY_TO(VisitOMPClauseWithPreInit(
C));
4044 TRY_TO(TraverseStmt(
C->getGrainsize()));
4048template <
typename Derived>
4050 OMPNumTasksClause *
C) {
4051 TRY_TO(VisitOMPClauseWithPreInit(
C));
4052 TRY_TO(TraverseStmt(
C->getNumTasks()));
4056template <
typename Derived>
4058 TRY_TO(TraverseStmt(
C->getHint()));
4062template <
typename Derived>
4064 OMPDistScheduleClause *
C) {
4065 TRY_TO(VisitOMPClauseWithPreInit(
C));
4066 TRY_TO(TraverseStmt(
C->getChunkSize()));
4070template <
typename Derived>
4076template <
typename Derived>
4078 TRY_TO(VisitOMPClauseList(
C));
4082template <
typename Derived>
4084 TRY_TO(VisitOMPClauseList(
C));
4088template <
typename Derived>
4090 OMPUseDevicePtrClause *
C) {
4091 TRY_TO(VisitOMPClauseList(
C));
4095template <
typename Derived>
4097 OMPUseDeviceAddrClause *
C) {
4098 TRY_TO(VisitOMPClauseList(
C));
4102template <
typename Derived>
4104 OMPIsDevicePtrClause *
C) {
4105 TRY_TO(VisitOMPClauseList(
C));
4109template <
typename Derived>
4111 OMPHasDeviceAddrClause *
C) {
4112 TRY_TO(VisitOMPClauseList(
C));
4116template <
typename Derived>
4118 OMPNontemporalClause *
C) {
4119 TRY_TO(VisitOMPClauseList(
C));
4120 for (
auto *E :
C->private_refs()) {
4126template <
typename Derived>
4131template <
typename Derived>
4133 TRY_TO(TraverseStmt(
C->getEventHandler()));
4137template <
typename Derived>
4139 OMPUsesAllocatorsClause *
C) {
4140 for (
unsigned I = 0, E =
C->getNumberOfAllocators(); I < E; ++I) {
4141 const OMPUsesAllocatorsClause::Data
Data =
C->getAllocatorData(I);
4148template <
typename Derived>
4150 OMPAffinityClause *
C) {
4151 TRY_TO(TraverseStmt(
C->getModifier()));
4152 for (
Expr *E :
C->varlist())
4157template <
typename Derived>
4159 TRY_TO(VisitOMPClauseWithPreInit(
C));
4160 TRY_TO(TraverseStmt(
C->getThreadID()));
4164template <
typename Derived>
4169template <
typename Derived>
4171 OMPXDynCGroupMemClause *
C) {
4172 TRY_TO(VisitOMPClauseWithPreInit(
C));
4173 TRY_TO(TraverseStmt(
C->getSize()));
4177template <
typename Derived>
4179 OMPDynGroupprivateClause *
C) {
4180 TRY_TO(VisitOMPClauseWithPreInit(
C));
4181 TRY_TO(TraverseStmt(
C->getSize()));
4185template <
typename Derived>
4187 OMPDoacrossClause *
C) {
4188 TRY_TO(VisitOMPClauseList(
C));
4192template <
typename Derived>
4194 OMPXAttributeClause *
C) {
4198template <
typename Derived>
4203template <
typename Derived>
4204bool RecursiveASTVisitor<Derived>::TraverseOpenACCConstructStmt(
4206 TRY_TO(VisitOpenACCClauseList(
C->clauses()));
4210template <
typename Derived>
4211bool RecursiveASTVisitor<Derived>::TraverseOpenACCAssociatedStmtConstruct(
4213 TRY_TO(TraverseOpenACCConstructStmt(S));
4214 TRY_TO(TraverseStmt(S->getAssociatedStmt()));
4218template <
typename Derived>
4219bool RecursiveASTVisitor<Derived>::VisitOpenACCClause(
const OpenACCClause *
C) {
4220 for (
const Stmt *Child :
C->children())
4221 TRY_TO(TraverseStmt(
const_cast<Stmt *
>(Child)));
4225template <
typename Derived>
4226bool RecursiveASTVisitor<Derived>::VisitOpenACCClauseList(
4229 for (
const auto *
C : Clauses)
4230 TRY_TO(VisitOpenACCClause(
C));
4235 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4237 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4239 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4241 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4243 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4245 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4247 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4249 if (S->hasDevNumExpr())
4250 TRY_TO(TraverseStmt(S->getDevNumExpr()));
4251 for (
auto *E : S->getQueueIdExprs())
4253 TRY_TO(VisitOpenACCClauseList(S->clauses()));
4256 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4258 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4260 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4262 {
TRY_TO(VisitOpenACCClauseList(S->clauses())); })
4264 {
TRY_TO(TraverseOpenACCAssociatedStmtConstruct(S)); })
4266 for (
auto *E : S->getVarList())