Skip to content

Commit e8f21b1

Browse files
committed
llvm-undname: Support demangling the spaceship operator
Also add a test for demanling the co_await operator. llvm-svn: 359007
1 parent 171b74e commit e8f21b1

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ enum class IntrinsicFunctionKind : uint8_t {
170170
VectorCopyCtorIter, // ?__G vector copy constructor iterator
171171
VectorVbaseCopyCtorIter, // ?__H vector vbase copy constructor iterator
172172
ManVectorVbaseCopyCtorIter, // ?__I managed vector vbase copy constructor
173-
CoAwait, // ?__L co_await
174-
Spaceship, // operator<=>
173+
CoAwait, // ?__L operator co_await
174+
Spaceship, // ?__M operator<=>
175175
MaxIntrinsic
176176
};
177177

llvm/lib/Demangle/MicrosoftDemangle.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -626,8 +626,8 @@ Demangler::translateIntrinsicFunctionCode(char CH,
626626
// iter
627627
IFK::None, // ?__J local static thread guard
628628
IFK::None, // ?__K operator ""_name
629-
IFK::CoAwait, // ?__L co_await
630-
IFK::None, // ?__M <unused>
629+
IFK::CoAwait, // ?__L operator co_await
630+
IFK::Spaceship, // ?__M operator<=>
631631
IFK::None, // ?__N <unused>
632632
IFK::None, // ?__O <unused>
633633
IFK::None, // ?__P <unused>
@@ -687,7 +687,6 @@ Demangler::demangleFunctionIdentifierCode(StringView &MangledName,
687687
translateIntrinsicFunctionCode(CH, Group));
688688
}
689689
}
690-
// No Mangling Yet: Spaceship, // operator<=>
691690

692691
DEMANGLE_UNREACHABLE;
693692
}

llvm/lib/Demangle/MicrosoftDemangleNodes.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,9 @@ void IntrinsicFunctionIdentifierNode::output(OutputStream &OS,
337337
"`vector vbase copy constructor iterator'");
338338
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, ManVectorVbaseCopyCtorIter,
339339
"`managed vector vbase copy constructor iterator'");
340-
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait, "co_await");
341-
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator <=>");
340+
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait,
341+
"operator co_await");
342+
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator<=>");
342343
case IntrinsicFunctionKind::MaxIntrinsic:
343344
case IntrinsicFunctionKind::None:
344345
break;

llvm/test/Demangle/ms-cxx20.test

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
; RUN: llvm-undname < %s | FileCheck %s
2+
3+
; CHECK-NOT: Invalid mangled name
4+
5+
??__LA@@QEAA?AUno_suspend@@XZ
6+
; CHECK: struct no_suspend __cdecl A::operator co_await(void)
7+
8+
??__MS@@QEAA?AVstrong_ordering@std@@AEBU0@@Z'
9+
; CHECK: class std::strong_ordering __cdecl S::operator<=>(struct S const &)

0 commit comments

Comments
 (0)