llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Haojian Wu (hokein) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/91750.diff 3 Files Affected: - (modified) clang/lib/AST/ASTConcept.cpp (+7-1) - (modified) clang/unittests/AST/CMakeLists.txt (+1) - (added) clang/unittests/AST/ConceptPrinterTest.cpp (+57) ``````````diff 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>")); +} `````````` </details> https://github.com/llvm/llvm-project/pull/91750 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits