[clang] Issue #61157 (PR #167319)

via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 10 06:23:54 PST 2025


https://github.com/Sandeep2265 created https://github.com/llvm/llvm-project/pull/167319

Added function checks if a type is a TypedefType and, if so, returns its original typedef name instead of printing the full type.This helps keep typedef names preserved in ExtractAPI declaration fragments instead of showing the underlying struct type.

>From dafd837aca7d19b8827619be6907d55beee3a701 Mon Sep 17 00:00:00 2001
From: Sandeep Krapa <sandeep at 10.8.107.113>
Date: Mon, 10 Nov 2025 19:42:44 +0530
Subject: [PATCH] Added a helper function OriginalNameTypedef(),it may help fix
 the issue with typedefs for structs.

---
 clang/lib/ExtractAPI/DeclarationFragments.cpp | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/clang/lib/ExtractAPI/DeclarationFragments.cpp b/clang/lib/ExtractAPI/DeclarationFragments.cpp
index e5eda46df8056..16a524702e963 100644
--- a/clang/lib/ExtractAPI/DeclarationFragments.cpp
+++ b/clang/lib/ExtractAPI/DeclarationFragments.cpp
@@ -63,6 +63,17 @@ void findTypeLocForBlockDecl(const clang::TypeSourceInfo *TSInfo,
 
 } // namespace
 
+static std::string OriginalNameTypedef(const clang::QualType &qt,
+                                       const clang::PrintingPolicy &policy) {
+  if (const auto *tt = llvm::dyn_cast<clang::TypedefType>(qt.getTypePtrOrNull())) {
+    const auto *td = tt->getDecl();
+    if (!td->getName().empty())
+      return td->getName().str();
+  }
+  return qt.getAsString(policy);
+}
+
+
 DeclarationFragments &
 DeclarationFragments::appendUnduplicatedTextCharacter(char Character) {
   if (!Fragments.empty()) {
@@ -452,7 +463,8 @@ DeclarationFragments DeclarationFragmentsBuilder::getFragmentsForType(
   // Default fragment builder for other kinds of types (BuiltinType etc.)
   SmallString<128> USR;
   clang::index::generateUSRForType(Base, Context, USR);
-  Fragments.append(Base.getAsString(),
+  std::string typestr = OriginalNameTypedef(Base, Context.getPrintingPolicy());
+  Fragments.append(typestr,
                    DeclarationFragments::FragmentKind::TypeIdentifier, USR);
 
   return Fragments;



More information about the cfe-commits mailing list