From a2ca6e7803b7e5583bbc38d68002d32976a6f4b0 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 28 May 2019 15:30:04 +0000 Subject: [PATCH] llvm-undname: Support demangling char8_t Ports clang's mangling support added in r354633 to llvm-undname. llvm-svn: 361839 --- llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h | 1 + llvm/lib/Demangle/MicrosoftDemangle.cpp | 2 ++ llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 1 + llvm/test/Demangle/ms-cxx20.test | 3 +++ 4 files changed, 7 insertions(+) diff --git a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h index 63111bc55910..df384e7362a7 100644 --- a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h +++ b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h @@ -82,6 +82,7 @@ enum class PrimitiveKind { Char, Schar, Uchar, + Char8, Char16, Char32, Short, diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index 4abb48e57573..425c7d3fd19b 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -1944,6 +1944,8 @@ PrimitiveTypeNode *Demangler::demanglePrimitiveType(StringView &MangledName) { return Arena.alloc(PrimitiveKind::Uint64); case 'W': return Arena.alloc(PrimitiveKind::Wchar); + case 'Q': + return Arena.alloc(PrimitiveKind::Char8); case 'S': return Arena.alloc(PrimitiveKind::Char16); case 'U': diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index 2c1e5f44f422..c26151c5b19f 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -130,6 +130,7 @@ void PrimitiveTypeNode::outputPre(OutputStream &OS, OutputFlags Flags) const { OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Char, "char"); OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Schar, "signed char"); OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Uchar, "unsigned char"); + OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Char8, "char8_t"); OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Char16, "char16_t"); OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Char32, "char32_t"); OUTPUT_ENUM_CLASS_VALUE(PrimitiveKind, Short, "short"); diff --git a/llvm/test/Demangle/ms-cxx20.test b/llvm/test/Demangle/ms-cxx20.test index 7e116f1ebcd4..587f41aa49ba 100644 --- a/llvm/test/Demangle/ms-cxx20.test +++ b/llvm/test/Demangle/ms-cxx20.test @@ -7,3 +7,6 @@ ??__MS@@QEAA?AVstrong_ordering@std@@AEBU0@@Z' ; CHECK: class std::strong_ordering __cdecl S::operator<=>(struct S const &) + +?f@@YAX_Q@Z +; CHECK: void __cdecl f(char8_t)