llvm-undname: Support demangling the spaceship operator

Also add a test for demanling the co_await operator.

llvm-svn: 359007
This commit is contained in:
Nico Weber 2019-04-23 16:20:27 +00:00
parent 171b74e31c
commit e8f21b1a6b
4 changed files with 16 additions and 7 deletions

View File

@ -170,8 +170,8 @@ enum class IntrinsicFunctionKind : uint8_t {
VectorCopyCtorIter, // ?__G vector copy constructor iterator
VectorVbaseCopyCtorIter, // ?__H vector vbase copy constructor iterator
ManVectorVbaseCopyCtorIter, // ?__I managed vector vbase copy constructor
CoAwait, // ?__L co_await
Spaceship, // operator<=>
CoAwait, // ?__L operator co_await
Spaceship, // ?__M operator<=>
MaxIntrinsic
};

View File

@ -626,8 +626,8 @@ Demangler::translateIntrinsicFunctionCode(char CH,
// iter
IFK::None, // ?__J local static thread guard
IFK::None, // ?__K operator ""_name
IFK::CoAwait, // ?__L co_await
IFK::None, // ?__M <unused>
IFK::CoAwait, // ?__L operator co_await
IFK::Spaceship, // ?__M operator<=>
IFK::None, // ?__N <unused>
IFK::None, // ?__O <unused>
IFK::None, // ?__P <unused>
@ -687,7 +687,6 @@ Demangler::demangleFunctionIdentifierCode(StringView &MangledName,
translateIntrinsicFunctionCode(CH, Group));
}
}
// No Mangling Yet: Spaceship, // operator<=>
DEMANGLE_UNREACHABLE;
}

View File

@ -337,8 +337,9 @@ void IntrinsicFunctionIdentifierNode::output(OutputStream &OS,
"`vector vbase copy constructor iterator'");
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, ManVectorVbaseCopyCtorIter,
"`managed vector vbase copy constructor iterator'");
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait, "co_await");
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator <=>");
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait,
"operator co_await");
OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator<=>");
case IntrinsicFunctionKind::MaxIntrinsic:
case IntrinsicFunctionKind::None:
break;

View File

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