[clang] [Clang][TypePrinter] Make printNestedNameSpecifier look at typedefs (PR #169364)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 24 09:00:48 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
This is to resolve a regression caused by #<!-- -->168534.
Now when we have an anonymous object like a struct or union that has a typedef attached, we print the typedef name instead of listing it as anonymous.
---
Full diff: https://github.com/llvm/llvm-project/pull/169364.diff
2 Files Affected:
- (modified) clang/lib/AST/Decl.cpp (+3-1)
- (modified) clang/unittests/AST/TypePrinterTest.cpp (+20)
``````````diff
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 555aa5c050ffd..13919a56af0e8 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -1790,7 +1790,9 @@ void NamedDecl::printNestedNameSpecifier(raw_ostream &OS,
else
OS << *ND;
} else if (const auto *RD = dyn_cast<RecordDecl>(DC)) {
- if (!RD->getIdentifier())
+ if (TypedefNameDecl *Typedef = RD->getTypedefNameForAnonDecl())
+ OS << Typedef->getIdentifier()->getName();
+ else if (!RD->getIdentifier())
OS << "(anonymous " << RD->getKindName() << ')';
else
OS << *RD;
diff --git a/clang/unittests/AST/TypePrinterTest.cpp b/clang/unittests/AST/TypePrinterTest.cpp
index 410ec021d6e72..7bf2bef5ac641 100644
--- a/clang/unittests/AST/TypePrinterTest.cpp
+++ b/clang/unittests/AST/TypePrinterTest.cpp
@@ -341,3 +341,23 @@ TEST(TypePrinter, NestedNameSpecifiers) {
Policy.AnonymousTagLocations = false;
}));
}
+
+TEST(TypePrinter, NestedNameSpecifiersTypedef) {
+ constexpr char Code[] = R"cpp(
+ typedef union {
+ struct {
+ struct {
+ unsigned int baz;
+ } bar;
+ };
+ } foo;
+ )cpp";
+
+ ASSERT_TRUE(PrintedTypeMatches(
+ Code, {}, fieldDecl(hasName("bar"), hasType(qualType().bind("id"))),
+ "struct foo::(anonymous struct)::(unnamed)",
+ [](PrintingPolicy &Policy) {
+ Policy.FullyQualifiedName = true;
+ Policy.AnonymousTagLocations = false;
+ }));
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/169364
More information about the cfe-commits
mailing list