nridge created this revision. nridge added a reviewer: kadircet. Herald added a subscriber: arphaman. Herald added a project: All. nridge requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D142871 Files: clang-tools-extra/clangd/FindTarget.cpp clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -1023,7 +1023,7 @@ class $Class_def[[Z]] {}; template $Bracket[[<]]typename, typename$Bracket[[>]] concept $Concept_decl[[C2]] = true; - template $Bracket[[<]]C2$Bracket[[<]]int$Bracket[[>]] $TemplateParameter_def[[A]]$Bracket[[>]] + template $Bracket[[<]]$Concept[[C2]]$Bracket[[<]]int$Bracket[[>]] $TemplateParameter_def[[A]]$Bracket[[>]] class $Class_def[[B]] {}; )cpp", // no crash Index: clang-tools-extra/clangd/FindTarget.cpp =================================================================== --- clang-tools-extra/clangd/FindTarget.cpp +++ clang-tools-extra/clangd/FindTarget.cpp @@ -607,6 +607,7 @@ llvm::SmallVector<ReferenceLoc> refInDecl(const Decl *D, const HeuristicResolver *Resolver) { struct Visitor : ConstDeclVisitor<Visitor> { + using Base = ConstDeclVisitor<Visitor>; Visitor(const HeuristicResolver *Resolver) : Resolver(Resolver) {} const HeuristicResolver *Resolver; @@ -707,6 +708,17 @@ /*IsDecl=*/true, {OCID->getCategoryDecl()}}); } + + void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) { + if (auto *TC = D->getTypeConstraint()) { + Refs.push_back(ReferenceLoc{TC->getNestedNameSpecifierLoc(), + TC->getConceptNameLoc(), + /*IsDecl=*/false, + {TC->getNamedConcept()}}); + } + // Pick up the name via VisitNamedDecl + Base::VisitTemplateTypeParmDecl(D); + } }; Visitor V{Resolver};
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -1023,7 +1023,7 @@ class $Class_def[[Z]] {}; template $Bracket[[<]]typename, typename$Bracket[[>]] concept $Concept_decl[[C2]] = true; - template $Bracket[[<]]C2$Bracket[[<]]int$Bracket[[>]] $TemplateParameter_def[[A]]$Bracket[[>]] + template $Bracket[[<]]$Concept[[C2]]$Bracket[[<]]int$Bracket[[>]] $TemplateParameter_def[[A]]$Bracket[[>]] class $Class_def[[B]] {}; )cpp", // no crash Index: clang-tools-extra/clangd/FindTarget.cpp =================================================================== --- clang-tools-extra/clangd/FindTarget.cpp +++ clang-tools-extra/clangd/FindTarget.cpp @@ -607,6 +607,7 @@ llvm::SmallVector<ReferenceLoc> refInDecl(const Decl *D, const HeuristicResolver *Resolver) { struct Visitor : ConstDeclVisitor<Visitor> { + using Base = ConstDeclVisitor<Visitor>; Visitor(const HeuristicResolver *Resolver) : Resolver(Resolver) {} const HeuristicResolver *Resolver; @@ -707,6 +708,17 @@ /*IsDecl=*/true, {OCID->getCategoryDecl()}}); } + + void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) { + if (auto *TC = D->getTypeConstraint()) { + Refs.push_back(ReferenceLoc{TC->getNestedNameSpecifierLoc(), + TC->getConceptNameLoc(), + /*IsDecl=*/false, + {TC->getNamedConcept()}}); + } + // Pick up the name via VisitNamedDecl + Base::VisitTemplateTypeParmDecl(D); + } }; Visitor V{Resolver};
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits