Skip to content

Commit 6f68fb0

Browse files
authored
Merge pull request #63950 from augusto2112/print-debug-name
Print debug name
2 parents d5fc5ed + c3d3c37 commit 6f68fb0

11 files changed

+119
-0
lines changed

lib/PrintAsClang/ClangSyntaxPrinter.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,3 +433,20 @@ void ClangSyntaxPrinter::printKnownCType(
433433
if (info->canBeNullable)
434434
os << " _Null_unspecified";
435435
}
436+
437+
void ClangSyntaxPrinter::printSwiftMangledNameForDebugger(
438+
const NominalTypeDecl *typeDecl) {
439+
printIgnoredCxx17ExtensionDiagnosticBlock([&]() {
440+
441+
os << "#pragma clang diagnostic push\n";
442+
os << "#pragma clang diagnostic ignored \"-Wreserved-identifier\"\n";
443+
auto mangled_name = mangler.mangleTypeForDebugger(
444+
typeDecl->getDeclaredInterfaceType(), nullptr);
445+
if (!mangled_name.empty()) {
446+
os << " typedef char " << mangled_name << ";\n";
447+
os << " static inline constexpr " << mangled_name
448+
<< " __swift_mangled_name = 0;\n";
449+
}
450+
});
451+
os << "#pragma clang diagnostic pop\n";
452+
}

lib/PrintAsClang/ClangSyntaxPrinter.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#ifndef SWIFT_PRINTASCLANG_CLANGSYNTAXPRINTER_H
1414
#define SWIFT_PRINTASCLANG_CLANGSYNTAXPRINTER_H
1515

16+
#include "swift/AST/ASTMangler.h"
1617
#include "swift/AST/Type.h"
1718
#include "swift/Basic/LLVM.h"
1819
#include "swift/ClangImporter/ClangImporter.h"
@@ -230,8 +231,14 @@ class ClangSyntaxPrinter {
230231
/// Print the given **known** type as a C type.
231232
void printKnownCType(Type t, PrimitiveTypeMapping &typeMapping) const;
232233

234+
/// Print the nominal type's Swift mangled name as a typedef from a char to
235+
/// the mangled name, and a static constexpr variable declaration, whose type
236+
/// is the aforementioned typedef, and whose name is known to the debugger.
237+
void printSwiftMangledNameForDebugger(const NominalTypeDecl *typeDecl);
238+
233239
protected:
234240
raw_ostream &os;
241+
swift::Mangle::ASTMangler mangler;
235242
};
236243

237244
} // end namespace swift

lib/PrintAsClang/PrintClangClassType.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ void ClangClassTypePrinter::printClassTypeDecl(
8383
os << " friend class " << cxx_synthesis::getCxxImplNamespaceName() << "::";
8484
printCxxImplClassName(os, typeDecl);
8585
os << ";\n";
86+
87+
printer.printSwiftMangledNameForDebugger(typeDecl);
88+
8689
os << "};\n\n";
8790

8891
// Print out the "hidden" _impl class.

lib/PrintAsClang/PrintClangValueType.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,9 @@ void ClangValueTypePrinter::printValueTypeDecl(
405405
printCxxImplClassName(os, typeDecl);
406406
printGenericParamRefs(os);
407407
os << ";\n";
408+
409+
printer.printSwiftMangledNameForDebugger(typeDecl);
410+
408411
os << "};\n";
409412
os << '\n';
410413

test/Interop/SwiftToCxx/class/swift-class-in-cxx.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ public final class ClassWithIntField {
6363
// CHECK-NEXT: SWIFT_INLINE_THUNK ClassWithIntField(void * _Nonnull ptr) noexcept : RefCountedClass(ptr) {}
6464
// CHECK-NEXT: private:
6565
// CHECK-NEXT: friend class _impl::_impl_ClassWithIntField;
66+
// CHECK-NEXT: #pragma clang diagnostic push
67+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
68+
// CHECK-NEXT: #pragma clang diagnostic push
69+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
70+
// CHECK-NEXT: typedef char $s5Class0A12WithIntFieldCD;
71+
// CHECK-NEXT: static inline constexpr $s5Class0A12WithIntFieldCD __swift_mangled_name = 0;
72+
// CHECK-NEXT: #pragma clang diagnostic pop
73+
// CHECK-NEXT: #pragma clang diagnostic pop
6674
// CHECK-NEXT: };
6775
// CHECK-EMPTY:
6876
// CHECK-NEXT:namespace _impl {

test/Interop/SwiftToCxx/class/swift-class-inheritance-in-cxx.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ public func useDerivedClass(_ x: DerivedClass) {
6565
// CHECK-NEXT: SWIFT_INLINE_THUNK DerivedClass(void * _Nonnull ptr) noexcept : BaseClass(ptr) {}
6666
// CHECK-NEXT: private:
6767
// CHECK-NEXT: friend class _impl::_impl_DerivedClass;
68+
// CHECK-NEXT: #pragma clang diagnostic push
69+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
70+
// CHECK-NEXT: #pragma clang diagnostic push
71+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
72+
// CHECK-NEXT: typedef char $s5Class07DerivedA0CD;
73+
// CHECK-NEXT: static inline constexpr $s5Class07DerivedA0CD __swift_mangled_name = 0;
74+
// CHECK-NEXT: #pragma clang diagnostic pop
75+
// CHECK-NEXT: #pragma clang diagnostic pop
6876
// CHECK-NEXT: };
6977

7078
// CHECK: class SWIFT_SYMBOL("s:5Class07DerivedbA0C") DerivedDerivedClass final : public DerivedClass {
@@ -75,6 +83,14 @@ public func useDerivedClass(_ x: DerivedClass) {
7583
// CHECK-NEXT: SWIFT_INLINE_THUNK DerivedDerivedClass(void * _Nonnull ptr) noexcept : DerivedClass(ptr) {}
7684
// CHECK-NEXT: private:
7785
// CHECK-NEXT: friend class _impl::_impl_DerivedDerivedClass;
86+
// CHECK-NEXT: #pragma clang diagnostic push
87+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
88+
// CHECK-NEXT: #pragma clang diagnostic push
89+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
90+
// CHECK-NEXT: typedef char $s5Class07DerivedbA0CD;
91+
// CHECK-NEXT: static inline constexpr $s5Class07DerivedbA0CD __swift_mangled_name = 0;
92+
// CHECK-NEXT: #pragma clang diagnostic pop
93+
// CHECK-NEXT: #pragma clang diagnostic pop
7894
// CHECK-NEXT: };
7995

8096
// Verify base class names are adjusted to avoid conflict with C++ keywords.

test/Interop/SwiftToCxx/generics/generic-struct-in-cxx.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,15 @@ public func inoutConcretePair(_ x: UInt16, _ y: inout GenericPair<UInt16, UInt16
231231

232232
// CHECK: swift::_impl::OpaqueStorage _storage;
233233
// CHECK-NEXT: friend class _impl::_impl_GenericPair<T_0_0, T_0_1>;
234+
// CHECK-NEXT: #pragma clang diagnostic push
235+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
236+
// CHECK-NEXT: #pragma clang diagnostic push
237+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
238+
// CHECK-NEXT: typedef char $s8Generics11GenericPairVyxq_GD;
239+
// CHECK-NEXT: static inline constexpr $s8Generics11GenericPairVyxq_GD __swift_mangled_name = 0;
240+
// CHECK-NEXT: #pragma clang diagnostic pop
241+
// CHECK-NEXT: #pragma clang diagnostic pop
242+
234243
// CHECK-NEXT: }
235244

236245
// CHECK: template<class T_0_0, class T_0_1>

test/Interop/SwiftToCxx/generics/generic-struct-known-layout-direct-in-cxx.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,14 @@
8585

8686
// CHECK: swift::_impl::OpaqueStorage _storage;
8787
// CHECK-NEXT: friend class _impl::_impl_GenericPair<T_0_0, T_0_1>;
88+
// CHECK-NEXT: #pragma clang diagnostic push
89+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
90+
// CHECK-NEXT: #pragma clang diagnostic push
91+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
92+
// CHECK-NEXT: typedef char $s8Generics11GenericPairVyxq_GD;
93+
// CHECK-NEXT: static inline constexpr $s8Generics11GenericPairVyxq_GD __swift_mangled_name = 0;
94+
// CHECK-NEXT: #pragma clang diagnostic pop
95+
// CHECK-NEXT: #pragma clang diagnostic pop
8896
// CHECK-NEXT: }
8997

9098
// CHECK: SWIFT_INLINE_THUNK void inoutConcretePair(uint16_t x, GenericPair<uint16_t, uint16_t>& y) noexcept SWIFT_SYMBOL("s:8Generics17inoutConcretePairyys6UInt16V_AA07GenericD0VyA2DGztF") {

test/Interop/SwiftToCxx/structs/resilient-struct-in-cxx.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ public struct FirstSmallStruct {
6262
// CHECK-EMPTY:
6363
// CHECK-NEXT: swift::_impl::OpaqueStorage _storage;
6464
// CHECK-NEXT: friend class _impl::_impl_FirstSmallStruct;
65+
// CHECK-NEXT: #pragma clang diagnostic push
66+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
67+
// CHECK-NEXT: #pragma clang diagnostic push
68+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
69+
// CHECK-NEXT: typedef char $s7Structs16FirstSmallStructVD;
70+
// CHECK-NEXT: static inline constexpr $s7Structs16FirstSmallStructVD __swift_mangled_name = 0;
71+
// CHECK-NEXT: #pragma clang diagnostic pop
72+
// CHECK-NEXT: #pragma clang diagnostic pop
6573
// CHECK-NEXT:};
6674

6775
// CHECK: class _impl_FirstSmallStruct {
@@ -100,6 +108,14 @@ public struct FirstSmallStruct {
100108
// CHECK: class SWIFT_SYMBOL("s:7Structs12FrozenStructV") FrozenStruct final {
101109
// CHECK: alignas(4) char _storage[4];
102110
// CHECK-NEXT: friend class _impl::_impl_FrozenStruct;
111+
// CHECK-NEXT: #pragma clang diagnostic push
112+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
113+
// CHECK-NEXT: #pragma clang diagnostic push
114+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
115+
// CHECK-NEXT: typedef char $s7Structs12FrozenStructVD;
116+
// CHECK-NEXT: static inline constexpr $s7Structs12FrozenStructVD __swift_mangled_name = 0;
117+
// CHECK-NEXT: #pragma clang diagnostic pop
118+
// CHECK-NEXT: #pragma clang diagnostic pop
103119
// CHECK-NEXT: };
104120

105121
public struct LargeStruct {
@@ -145,6 +161,14 @@ public struct LargeStruct {
145161
// CHECK-EMPTY:
146162
// CHECK-NEXT: swift::_impl::OpaqueStorage _storage;
147163
// CHECK-NEXT: friend class _impl::_impl_LargeStruct;
164+
// CHECK-NEXT: #pragma clang diagnostic push
165+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
166+
// CHECK-NEXT: #pragma clang diagnostic push
167+
// CHECK-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
168+
// CHECK-NEXT: typedef char $s7Structs11LargeStructVD;
169+
// CHECK-NEXT: static inline constexpr $s7Structs11LargeStructVD __swift_mangled_name = 0;
170+
// CHECK-NEXT: #pragma clang diagnostic pop
171+
// CHECK-NEXT: #pragma clang diagnostic pop
148172
// CHECK-NEXT: };
149173

150174
private class RefCountedClass {

test/Interop/SwiftToCxx/structs/small-structs-pass-return-direct-in-cxx.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ public func printStructOneI64_resilient(_ x : StructOneI64_resilient) {
5252
// RESILIENT: class SWIFT_SYMBOL({{.*}}) StructOneI64_resilient final {
5353
// RESILIENT: swift::_impl::OpaqueStorage _storage;
5454
// RESILIENT-NEXT: friend class _impl::_impl_StructOneI64_resilient;
55+
// RESILIENT-NEXT: #pragma clang diagnostic push
56+
// RESILIENT-NEXT: #pragma clang diagnostic ignored "-Wc++17-extensions"
57+
// RESILIENT-NEXT: #pragma clang diagnostic push
58+
// RESILIENT-NEXT: #pragma clang diagnostic ignored "-Wreserved-identifier"
59+
// RESILIENT-NEXT: typedef char $s7Structs22StructOneI64_resilientVD;
60+
// RESILIENT-NEXT: static inline constexpr $s7Structs22StructOneI64_resilientVD __swift_mangled_name = 0;
61+
// RESILIENT-NEXT: #pragma clang diagnostic pop
62+
// RESILIENT-NEXT: #pragma clang diagnostic pop
5563
// RESILIENT-NEXT: };
5664
#endif
5765

0 commit comments

Comments
 (0)