OSDN Git Service

llvm-undname: Support demangling char8_t
authorNico Weber <nicolasweber@gmx.de>
Tue, 28 May 2019 15:30:04 +0000 (15:30 +0000)
committerNico Weber <nicolasweber@gmx.de>
Tue, 28 May 2019 15:30:04 +0000 (15:30 +0000)
Ports clang's mangling support added in r354633 to llvm-undname.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361839 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Demangle/MicrosoftDemangleNodes.h
lib/Demangle/MicrosoftDemangle.cpp
lib/Demangle/MicrosoftDemangleNodes.cpp
test/Demangle/ms-cxx20.test

index 63111bc..df384e7 100644 (file)
@@ -82,6 +82,7 @@ enum class PrimitiveKind {
   Char,
   Schar,
   Uchar,
+  Char8,
   Char16,
   Char32,
   Short,
index 4abb48e..425c7d3 100644 (file)
@@ -1944,6 +1944,8 @@ PrimitiveTypeNode *Demangler::demanglePrimitiveType(StringView &MangledName) {
       return Arena.alloc<PrimitiveTypeNode>(PrimitiveKind::Uint64);
     case 'W':
       return Arena.alloc<PrimitiveTypeNode>(PrimitiveKind::Wchar);
+    case 'Q':
+      return Arena.alloc<PrimitiveTypeNode>(PrimitiveKind::Char8);
     case 'S':
       return Arena.alloc<PrimitiveTypeNode>(PrimitiveKind::Char16);
     case 'U':
index 2c1e5f4..c26151c 100644 (file)
@@ -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");
index 7e116f1..587f41a 100644 (file)
@@ -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)