https://github.com/evelez7 updated 
https://github.com/llvm/llvm-project/pull/140856

>From e25581d28ecda89fe4e550da71e668b6ae749804 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvel...@gmail.com>
Date: Tue, 20 May 2025 23:26:02 -0700
Subject: [PATCH 1/2] [clang-doc] fix conversion names of dependent types

Fixes #59812

The names of conversion functions of template type parameters were
being emitted as "type-parameter-N-M". Now we check if the conversion
type is a TemplateTypeParmType and reconstruct the source name.
---
 clang-tools-extra/clang-doc/Serialize.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/clang-tools-extra/clang-doc/Serialize.cpp 
b/clang-tools-extra/clang-doc/Serialize.cpp
index 18db427b5239e..585a46112d43d 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -525,7 +525,13 @@ template <typename T>
 static void populateInfo(Info &I, const T *D, const FullComment *C,
                          bool &IsInAnonymousNamespace) {
   I.USR = getUSRForDecl(D);
-  I.Name = D->getNameAsString();
+  auto ConversionDecl = dyn_cast_or_null<CXXConversionDecl>(D);
+  if (ConversionDecl && ConversionDecl->getConversionType()
+                            .getTypePtr()
+                            ->isTemplateTypeParmType())
+    I.Name = "operator " + ConversionDecl->getConversionType().getAsString();
+  else
+    I.Name = D->getNameAsString();
   populateParentNamespaces(I.Namespace, D, IsInAnonymousNamespace);
   if (C) {
     I.Description.emplace_back();

>From a4d5ad45cad45f21505fdd8e88e2706dc3343e88 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvel...@gmail.com>
Date: Thu, 22 May 2025 14:14:26 -0700
Subject: [PATCH 2/2] address review feedback

---
 clang-tools-extra/clang-doc/Serialize.cpp       |  4 ++--
 .../test/clang-doc/conversion_function.cpp      | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)
 create mode 100644 clang-tools-extra/test/clang-doc/conversion_function.cpp

diff --git a/clang-tools-extra/clang-doc/Serialize.cpp 
b/clang-tools-extra/clang-doc/Serialize.cpp
index 585a46112d43d..fe4ef9c50cc12 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -525,8 +525,8 @@ template <typename T>
 static void populateInfo(Info &I, const T *D, const FullComment *C,
                          bool &IsInAnonymousNamespace) {
   I.USR = getUSRForDecl(D);
-  auto ConversionDecl = dyn_cast_or_null<CXXConversionDecl>(D);
-  if (ConversionDecl && ConversionDecl->getConversionType()
+  if (auto ConversionDecl = dyn_cast_or_null<CXXConversionDecl>(D);
+      ConversionDecl && ConversionDecl->getConversionType()
                             .getTypePtr()
                             ->isTemplateTypeParmType())
     I.Name = "operator " + ConversionDecl->getConversionType().getAsString();
diff --git a/clang-tools-extra/test/clang-doc/conversion_function.cpp 
b/clang-tools-extra/test/clang-doc/conversion_function.cpp
new file mode 100644
index 0000000000000..fee86b356011e
--- /dev/null
+++ b/clang-tools-extra/test/clang-doc/conversion_function.cpp
@@ -0,0 +1,17 @@
+// RUN: rm -rf %t && mkdir -p %t
+
+// RUN: clang-doc --output=%t --executor=standalone %s 
+// RUN: find %t/ -regex ".*/[0-9A-F]*.yaml" -exec cat {} ";" | FileCheck %s 
--check-prefix=CHECK-YAML
+
+// RUN: clang-doc --format=html --output=%t --executor=standalone %s 
+// FileCheck %s --check-prefix=CHECK-HTML
+
+template <typename T>
+struct MyStruct {
+  operator T();
+};
+
+// CHECK-YAML:     Name:            'operator T'
+
+// CHECK-HTML: <h3 id='{{[0-9A-F]*}}'>operator T</h3>
+// CHECK-HTML: <p>public T operator T</p>

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to