Skip to content

Commit 73e1090

Browse files
authored
Merge pull request #15461 from eeckstein/demangler-work
2 parents 29788f6 + 99b9256 commit 73e1090

File tree

4 files changed

+22
-7
lines changed

4 files changed

+22
-7
lines changed

lib/Demangling/Demangler.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ swift::Demangle::makeSymbolicMangledNameStringRef(const char *base) {
140140
int swift::Demangle::getManglingPrefixLength(llvm::StringRef mangledName) {
141141
if (mangledName.empty()) return 0;
142142

143-
llvm::StringRef prefixes[] = {/*Swift 4*/ "_T0", /*Swift > 4*/ "$S", "_$S"};
143+
llvm::StringRef prefixes[] = {
144+
/*Swift 4*/ "_T0",
145+
/*Swift 4.x*/ "$S", "_$S",
146+
/*Swift 5+*/ "$s", "_$s"};
144147

145148
// Look for any of the known prefixes
146149
for (auto prefix : prefixes) {

test/Demangle/Inputs/manglings.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ _TToFC3foo3bar3basfT3zimCS_3zim_T_ ---> {T:_TFC3foo3bar3basfT3zimCS_3zim_T_,C} @
8282
_TTOFSC3fooFTSdSd_Sd ---> {T:_TFSC3fooFTSdSd_Sd} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
8383
_T03foo3barC3basyAA3zimCAE_tFTo ---> {T:_T03foo3barC3basyAA3zimCAE_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
8484
_T0SC3fooS2d_SdtFTO ---> {T:_T0SC3fooS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
85-
__$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
86-
__$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
85+
_$s3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$s3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
86+
_$sSC3fooyS2d_SdtFTO ---> {T:_$sSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
87+
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
88+
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
8789
_$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:_$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
8890
_$SSC3fooyS2d_SdtFTO ---> {T:_$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
89-
$S3foo3barC3bas3zimyAaEC_tFTo ---> {T:$S3foo3barC3bas3zimyAaEC_tF,C} @objc foo.bar.bas(zim: foo.zim) -> ()
90-
$SSC3fooyS2d_SdtFTO ---> {T:$SSC3fooyS2d_SdtF} @nonobjc __C_Synthesized.foo(Swift.Double, Swift.Double) -> Swift.Double
9191
_TTDFC3foo3bar3basfT3zimCS_3zim_T_ ---> dynamic foo.bar.bas(zim: foo.zim) -> ()
9292
_TFC3foo3bar3basfT3zimCS_3zim_T_ ---> foo.bar.bas(zim: foo.zim) -> ()
9393
_TF3foooi1pFTCS_3barVS_3bas_OS_3zim ---> foo.+ infix(foo.bar, foo.bas) -> foo.zim

tools/swift-demangle/swift-demangle.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ static int demangleSTDIN(const swift::Demangle::DemangleOptions &options) {
175175
// This doesn't handle Unicode symbols, but maybe that's okay.
176176
// Also accept the future mangling prefix.
177177
// TODO: remove the "_S" as soon as MANGLING_PREFIX_STR gets "_S".
178-
llvm::Regex maybeSymbol("(_T|_*\\$S|" MANGLING_PREFIX_STR ")[_a-zA-Z0-9$.]+");
178+
llvm::Regex maybeSymbol("(_T|_?\\$[Ss])[_a-zA-Z0-9$.]+");
179179

180180
swift::Demangle::Context DCtx;
181181
for (std::string mangled; std::getline(std::cin, mangled);) {
@@ -213,7 +213,12 @@ int main(int argc, char **argv) {
213213
} else {
214214
swift::Demangle::Context DCtx;
215215
for (llvm::StringRef name : InputNames) {
216-
demangle(llvm::outs(), name, DCtx, options);
216+
if (name.startswith("S")) {
217+
std::string correctedName = std::string("$") + name.str();
218+
demangle(llvm::outs(), correctedName, DCtx, options);
219+
} else {
220+
demangle(llvm::outs(), name, DCtx, options);
221+
}
217222
llvm::outs() << '\n';
218223
}
219224

unittests/SwiftDemangle/DemangleTest.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ TEST(FunctionNameDemangleTests, NewManglingPrefix) {
4242
char OutputBuffer[128];
4343

4444
const char *FunctionName = "$S1a10run_MatMulyySiF";
45+
const char *FunctionNameNew = "$s1a10run_MatMulyySiF";
4546
const char *DemangledName = "a.run_MatMul(Swift.Int) -> ()";
4647
const char *SimplifiedName = "run_MatMul(_:)";
4748

@@ -51,6 +52,12 @@ TEST(FunctionNameDemangleTests, NewManglingPrefix) {
5152
EXPECT_STREQ(DemangledName, OutputBuffer);
5253
EXPECT_EQ(Result, strlen(DemangledName));
5354

55+
Result = swift_demangle_getDemangledName(FunctionNameNew, OutputBuffer,
56+
sizeof(OutputBuffer));
57+
58+
EXPECT_STREQ(DemangledName, OutputBuffer);
59+
EXPECT_EQ(Result, strlen(DemangledName));
60+
5461
Result = swift_demangle_getSimplifiedDemangledName(FunctionName, OutputBuffer,
5562
sizeof(OutputBuffer));
5663

0 commit comments

Comments
 (0)