https://github.com/boomanaiden154 created https://github.com/llvm/llvm-project/pull/169364
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. >From 4f075f52c7c0ca1c4248e5565e4f960eb61f098c Mon Sep 17 00:00:00 2001 From: Aiden Grossman <[email protected]> Date: Mon, 24 Nov 2025 16:58:02 +0000 Subject: [PATCH] [Clang][TypePrinter] Make printNestedNameSpecifier look at typedefs 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. --- clang/lib/AST/Decl.cpp | 4 +++- clang/unittests/AST/TypePrinterTest.cpp | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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; + })); +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
