usaxena95 updated this revision to Diff 554962. usaxena95 marked 2 inline comments as done. usaxena95 added a comment.
Addressed comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D158842/new/ https://reviews.llvm.org/D158842 Files: clang-tools-extra/include-cleaner/lib/WalkAST.cpp clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp Index: clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp =================================================================== --- clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp +++ clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp @@ -528,5 +528,16 @@ const char* s = ""; auto sx = ^{s};)cpp"); } + +TEST(WalkAST, Concepts) { + std::string Concept = "template<typename T> concept $explicit^Foo = true;"; + testWalk(Concept, "template<typename T>concept Bar = ^Foo<T> && true;"); + testWalk(Concept, "template<^Foo T>void func() {}"); + testWalk(Concept, "template<typename T> requires ^Foo<T> void func() {}"); + testWalk(Concept, "template<typename T> void func() requires ^Foo<T> {}"); + testWalk(Concept, "void func(^Foo auto x) {}"); + // FIXME: Foo should be explicitly referenced. + testWalk("template<typename T> concept Foo = true;", "void func() { ^Foo auto x = 1; }"); +} } // namespace } // namespace clang::include_cleaner Index: clang-tools-extra/include-cleaner/lib/WalkAST.cpp =================================================================== --- clang-tools-extra/include-cleaner/lib/WalkAST.cpp +++ clang-tools-extra/include-cleaner/lib/WalkAST.cpp @@ -241,6 +241,11 @@ return true; } + bool VisitConceptReference(const ConceptReference *CR) { + report(CR->getConceptNameLoc(), CR->getFoundDecl()); + return true; + } + // Report a reference from explicit specializations to the specialized // template. Implicit ones are filtered out by RAV and explicit instantiations // are already traversed through typelocs.
Index: clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp =================================================================== --- clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp +++ clang-tools-extra/include-cleaner/unittests/WalkASTTest.cpp @@ -528,5 +528,16 @@ const char* s = ""; auto sx = ^{s};)cpp"); } + +TEST(WalkAST, Concepts) { + std::string Concept = "template<typename T> concept $explicit^Foo = true;"; + testWalk(Concept, "template<typename T>concept Bar = ^Foo<T> && true;"); + testWalk(Concept, "template<^Foo T>void func() {}"); + testWalk(Concept, "template<typename T> requires ^Foo<T> void func() {}"); + testWalk(Concept, "template<typename T> void func() requires ^Foo<T> {}"); + testWalk(Concept, "void func(^Foo auto x) {}"); + // FIXME: Foo should be explicitly referenced. + testWalk("template<typename T> concept Foo = true;", "void func() { ^Foo auto x = 1; }"); +} } // namespace } // namespace clang::include_cleaner Index: clang-tools-extra/include-cleaner/lib/WalkAST.cpp =================================================================== --- clang-tools-extra/include-cleaner/lib/WalkAST.cpp +++ clang-tools-extra/include-cleaner/lib/WalkAST.cpp @@ -241,6 +241,11 @@ return true; } + bool VisitConceptReference(const ConceptReference *CR) { + report(CR->getConceptNameLoc(), CR->getFoundDecl()); + return true; + } + // Report a reference from explicit specializations to the specialized // template. Implicit ones are filtered out by RAV and explicit instantiations // are already traversed through typelocs.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits