https://github.com/hokein updated https://github.com/llvm/llvm-project/pull/91750
>From e7b23e02e9b4c98d9e24dd1debcdefada7a16004 Mon Sep 17 00:00:00 2001 From: Haojian Wu <hokein...@gmail.com> Date: Fri, 10 May 2024 16:31:20 +0200 Subject: [PATCH 1/2] [AST] Print the separator , for template arguments in ConceptReference::print --- clang/lib/AST/ASTConcept.cpp | 8 ++- clang/unittests/AST/CMakeLists.txt | 1 + clang/unittests/AST/ConceptPrinterTest.cpp | 57 ++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 clang/unittests/AST/ConceptPrinterTest.cpp diff --git a/clang/lib/AST/ASTConcept.cpp b/clang/lib/AST/ASTConcept.cpp index b3ec99448b3e1..6bef68fc87eea 100644 --- a/clang/lib/AST/ASTConcept.cpp +++ b/clang/lib/AST/ASTConcept.cpp @@ -106,9 +106,15 @@ void ConceptReference::print(llvm::raw_ostream &OS, ConceptName.printName(OS, Policy); if (hasExplicitTemplateArgs()) { OS << "<"; + bool First = true; // FIXME: Find corresponding parameter for argument - for (auto &ArgLoc : ArgsAsWritten->arguments()) + for (auto &ArgLoc : ArgsAsWritten->arguments()) { + if (First) + First = false; + else + OS << ", "; ArgLoc.getArgument().print(Policy, OS, /*IncludeType*/ false); + } OS << ">"; } } diff --git a/clang/unittests/AST/CMakeLists.txt b/clang/unittests/AST/CMakeLists.txt index 54765e36db008..29d2b39cff8b1 100644 --- a/clang/unittests/AST/CMakeLists.txt +++ b/clang/unittests/AST/CMakeLists.txt @@ -24,6 +24,7 @@ add_clang_unittest(ASTTests CommentLexer.cpp CommentParser.cpp CommentTextTest.cpp + ConceptPrinterTest.cpp DataCollectionTest.cpp DeclPrinterTest.cpp DeclTest.cpp diff --git a/clang/unittests/AST/ConceptPrinterTest.cpp b/clang/unittests/AST/ConceptPrinterTest.cpp new file mode 100644 index 0000000000000..bd1f6bbfa5658 --- /dev/null +++ b/clang/unittests/AST/ConceptPrinterTest.cpp @@ -0,0 +1,57 @@ +//===- unittests/AST/ConceptPrinterTest.cpp --- Concept printer tests -----===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "ASTPrint.h" +#include "clang/AST/ASTConcept.h" +#include "clang/AST/ASTContext.h" +#include "clang/AST/ExprConcepts.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/Tooling/Tooling.h" +#include "llvm/ADT/SmallString.h" +#include "gtest/gtest.h" + +using namespace clang; +using namespace ast_matchers; +using namespace tooling; + +namespace { + +static void PrintConceptReference(raw_ostream &Out, const ASTContext *Context, + const ConceptSpecializationExpr *T, + PrintingPolicyAdjuster PolicyAdjuster) { + assert(T && T->getConceptReference() && + "Expected non-null concept reference"); + + PrintingPolicy Policy = Context->getPrintingPolicy(); + if (PolicyAdjuster) + PolicyAdjuster(Policy); + T->getConceptReference()->print(Out, Policy); +} + +::testing::AssertionResult +PrintedConceptMatches(StringRef Code, const std::vector<std::string> &Args, + const StatementMatcher &NodeMatch, + StringRef ExpectedPrinted) { + return PrintedNodeMatches<ConceptSpecializationExpr>( + Code, Args, NodeMatch, ExpectedPrinted, "", PrintConceptReference); +} +const internal::VariadicDynCastAllOfMatcher<Stmt, ConceptSpecializationExpr> + conceptSpecializationExpr; +} // unnamed namespace + +TEST(ConceptPrinter, ConceptReference) { + std::string Code = R"cpp( + template <typename, typename> concept D = true; + template<typename T, typename U> + requires D<T, U> + void g(T); + )cpp"; + auto Matcher = conceptSpecializationExpr().bind("id"); + + ASSERT_TRUE(PrintedConceptMatches(Code, {"-std=c++20"}, Matcher, "D<T, U>")); +} >From 251fd97fbf87d0c0fbe35f646058d3f9534c05a7 Mon Sep 17 00:00:00 2001 From: Haojian Wu <hokein...@gmail.com> Date: Fri, 10 May 2024 17:40:55 +0200 Subject: [PATCH 2/2] address review comments. --- clang/lib/AST/ASTConcept.cpp | 8 +++----- llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/clang/lib/AST/ASTConcept.cpp b/clang/lib/AST/ASTConcept.cpp index 6bef68fc87eea..0387fc9f6aec2 100644 --- a/clang/lib/AST/ASTConcept.cpp +++ b/clang/lib/AST/ASTConcept.cpp @@ -15,6 +15,7 @@ #include "clang/AST/ASTContext.h" #include "clang/AST/PrettyPrinter.h" #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringExtras.h" using namespace clang; @@ -106,13 +107,10 @@ void ConceptReference::print(llvm::raw_ostream &OS, ConceptName.printName(OS, Policy); if (hasExplicitTemplateArgs()) { OS << "<"; - bool First = true; + llvm::ListSeparator Sep(", "); // FIXME: Find corresponding parameter for argument for (auto &ArgLoc : ArgsAsWritten->arguments()) { - if (First) - First = false; - else - OS << ", "; + OS << Sep; ArgLoc.getArgument().print(Policy, OS, /*IncludeType*/ false); } OS << ">"; diff --git a/llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn b/llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn index 1fb3d621275ed..f66e86ad938bd 100644 --- a/llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/unittests/AST/BUILD.gn @@ -32,6 +32,7 @@ unittest("ASTTests") { "CommentLexer.cpp", "CommentParser.cpp", "CommentTextTest.cpp", + "ConceptPrinterTest.cpp", "DataCollectionTest.cpp", "DeclPrinterTest.cpp", "DeclTest.cpp", _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits