[clang] [llvm] [AST] Print the separator "," for template arguments in ConceptReference::print (PR #91750)

2024-05-10 Thread Haojian Wu via cfe-commits

https://github.com/hokein closed 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


[clang] [llvm] [AST] Print the separator "," for template arguments in ConceptReference::print (PR #91750)

2024-05-10 Thread via cfe-commits

https://github.com/cor3ntin approved this pull request.


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


[clang] [llvm] [AST] Print the separator "," for template arguments in ConceptReference::print (PR #91750)

2024-05-10 Thread Haojian Wu via cfe-commits


@@ -24,6 +24,7 @@ add_clang_unittest(ASTTests
   CommentLexer.cpp
   CommentParser.cpp
   CommentTextTest.cpp
+  ConceptPrinterTest.cpp

hokein wrote:

Done (we're not required to update gn build files, and there's a bot that can 
automate the porting).

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


[clang] [llvm] [AST] Print the separator "," for template arguments in ConceptReference::print (PR #91750)

2024-05-10 Thread Haojian Wu via cfe-commits


@@ -106,9 +106,15 @@ void ConceptReference::print(llvm::raw_ostream ,
   ConceptName.printName(OS, Policy);
   if (hasExplicitTemplateArgs()) {
 OS << "<";
+bool First = true;
 // FIXME: Find corresponding parameter for argument
-for (auto  : ArgsAsWritten->arguments())
+for (auto  : ArgsAsWritten->arguments()) {
+  if (First)
+First = false;
+  else
+OS << ", ";

hokein wrote:

Thanks! I wasn't aware we have such a helpful utility.

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


[clang] [llvm] [AST] Print the separator "," for template arguments in ConceptReference::print (PR #91750)

2024-05-10 Thread Haojian Wu via cfe-commits

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 
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 ,
   ConceptName.printName(OS, Policy);
   if (hasExplicitTemplateArgs()) {
 OS << "<";
+bool First = true;
 // FIXME: Find corresponding parameter for argument
-for (auto  : ArgsAsWritten->arguments())
+for (auto  : 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 0..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 , 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 ,
+  const StatementMatcher ,
+  StringRef ExpectedPrinted) {
+  return PrintedNodeMatches(
+  Code, Args, NodeMatch, ExpectedPrinted, "", PrintConceptReference);
+}
+const internal::VariadicDynCastAllOfMatcher
+conceptSpecializationExpr;
+} // unnamed namespace
+
+TEST(ConceptPrinter, ConceptReference) {
+  std::string Code = R"cpp(
+template  concept D = true;
+template
+requires D
+void g(T);
+  )cpp";
+  auto Matcher = conceptSpecializationExpr().bind("id");
+
+  ASSERT_TRUE(PrintedConceptMatches(Code, {"-std=c++20"}, Matcher, "D"));
+}

>From 251fd97fbf87d0c0fbe35f646058d3f9534c05a7 Mon Sep 17 00:00:00 2001
From: Haojian Wu 
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 ,
   ConceptName.printName(OS, Policy);
   if (hasExplicitTemplateArgs()) {
 OS << "<";
-bool First = true;
+llvm::ListSeparator Sep(", ");
 // FIXME: Find corresponding parameter for argument
 for (auto  : ArgsAsWritten->arguments()) {
-  if (First)
-First = false;
-  else
-