[demangle] Support for C++2a char8_t

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@364677 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/demangle/ItaniumDemangle.h b/src/demangle/ItaniumDemangle.h
index ad1034f..aaccb27 100644
--- a/src/demangle/ItaniumDemangle.h
+++ b/src/demangle/ItaniumDemangle.h
@@ -3624,6 +3624,10 @@
     case 's':
       First += 2;
       return make<NameType>("char16_t");
+    //                ::= Du   # char8_t (C++2a, not yet in the Itanium spec)
+    case 'u':
+      First += 2;
+      return make<NameType>("char8_t");
     //                ::= Da   # auto (in dependent new-expressions)
     case 'a':
       First += 2;
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index 761226b..8e41cd9 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29772,6 +29772,9 @@
 
     {"_ZN3FooIXu8__uuidofzdeL_Z3sucEEEC1Ev", "Foo<__uuidof(*(suc))>::Foo()"},
     {"_ZN3FooIXu8__uuidoft13SomeUUIDClassEEC1Ev", "Foo<__uuidof(SomeUUIDClass)>::Foo()"},
+
+    // C++2a char8_t:
+    {"_ZTSPDu", "typeinfo name for char8_t*"},
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);