From 91daf2a98bf10c6974c79305eca4ac13b76b19d1 Mon Sep 17 00:00:00 2001 From: Dan McGregor Date: Tue, 2 May 2023 11:53:48 -0400 Subject: [PATCH] Call printName to get name of Decl Rather than sending a name directly to the stream, use printName to preserve any PrintingPolicy. This ensures that names are properly affected by path remapping. Fixes: https://github.com/llvm/llvm-project/issues/62192 Differential Revision: https://reviews.llvm.org/D149272 (cherry picked from commit ea6ecdbfe09d4318f2d616af794e2930f996e393) --- clang/docs/ReleaseNotes.rst | 2 ++ clang/lib/AST/Decl.cpp | 4 ++-- clang/lib/AST/DeclarationName.cpp | 4 ++-- clang/test/CodeGen/debug-prefix-map.cpp | 11 +++++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 clang/test/CodeGen/debug-prefix-map.cpp diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index e60cc28f6e0f..24de6156c0f5 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -1626,8 +1626,8 @@ Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const { llvm_unreachable("unknown module kind"); } -void NamedDecl::printName(raw_ostream &OS, const PrintingPolicy&) const { - OS << Name; +void NamedDecl::printName(raw_ostream &OS, const PrintingPolicy &Policy) const { + Name.print(OS, Policy); } void NamedDecl::printName(raw_ostream &OS) const { diff --git a/clang/lib/AST/DeclarationName.cpp b/clang/lib/AST/DeclarationName.cpp index c1219041a466..da8b3886c340 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -117,12 +117,12 @@ static void printCXXConstructorDestructorName(QualType ClassType, Policy.adjustForCPlusPlus(); if (const RecordType *ClassRec = ClassType->getAs()) { - OS << *ClassRec->getDecl(); + ClassRec->getDecl()->printName(OS, Policy); return; } if (Policy.SuppressTemplateArgsInCXXConstructors) { if (auto *InjTy = ClassType->getAs()) { - OS << *InjTy->getDecl(); + InjTy->getDecl()->printName(OS, Policy); return; } } diff --git a/clang/test/CodeGen/debug-prefix-map.cpp b/clang/test/CodeGen/debug-prefix-map.cpp new file mode 100644 index 000000000000..5e90aedd8ed7 --- /dev/null +++ b/test/CodeGen/debug-prefix-map.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=./UNLIKELY_PATH/empty -S %s -emit-llvm -o - | FileCheck %s + +struct alignas(64) an { + struct { + unsigned char x{0}; + } arr[64]; +}; + +struct an *pan = new an; + +// CHECK: !DISubprogram(name: "(unnamed struct at ./UNLIKELY_PATH/empty{{/|\\\\}}{{.*}}",