Skip to content

Commit 80190ad

Browse files
authored
Merge pull request #77184 from eeckstein/fix-demangler
demangler: correctly handle function attributes when there is an unmangled suffix
2 parents b6247b0 + 8565c28 commit 80190ad

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

lib/Demangling/Demangler.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,8 @@ NodePointer Demangler::demangleSymbol(StringRef MangledName,
757757

758758
NodePointer topLevel = createNode(Node::Kind::Global);
759759

760+
NodePointer suffix = popNode(Node::Kind::Suffix);
761+
760762
NodePointer Parent = topLevel;
761763
while (NodePointer FuncAttr = popNode(isFunctionAttr)) {
762764
Parent->addChild(FuncAttr, *this);
@@ -774,6 +776,9 @@ NodePointer Demangler::demangleSymbol(StringRef MangledName,
774776
break;
775777
}
776778
}
779+
if (suffix)
780+
topLevel->addChild(suffix, *this);
781+
777782
if (topLevel->getNumChildren() == 0)
778783
return nullptr;
779784

test/Demangle/Inputs/manglings.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ _$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Sw
9797
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
9898
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
9999
_$sTA.123 ---> {T:} partial apply forwarder with unmangled suffix ".123"
100-
$s4main3fooyySiFyyXEfU_TA.1 ---> {T:} closure #1 () -> () in main.foo(Swift.Int) -> ()partial apply forwarder with unmangled suffix ".1"
100+
$s4main3fooyySiFyyXEfU_TA.1 ---> {T:} partial apply forwarder for closure #1 () -> () in main.foo(Swift.Int) -> () with unmangled suffix ".1"
101+
$s4main8MyStructV3fooyyFAA1XV_Tg5.foo ---> generic specialization <main.X> of main.MyStruct.foo() -> () with unmangled suffix ".foo"
101102
_TTDFC3foo3bar3basfT3zimCS_3zim_T_ ---> dynamic foo.bar.bas(zim: foo.zim) -> ()
102103
_TFC3foo3bar3basfT3zimCS_3zim_T_ ---> foo.bar.bas(zim: foo.zim) -> ()
103104
_TF3foooi1pFTCS_3barVS_3bas_OS_3zim ---> foo.+ infix(foo.bar, foo.bas) -> foo.zim

0 commit comments

Comments
 (0)