[demangler] Support for block literals.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@351482 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/demangle/ItaniumDemangle.h b/src/demangle/ItaniumDemangle.h
index 9a54ff5..f35c062 100644
--- a/src/demangle/ItaniumDemangle.h
+++ b/src/demangle/ItaniumDemangle.h
@@ -2480,6 +2480,12 @@
       return nullptr;
     return make<ClosureTypeName>(Params, Count);
   }
+  if (consumeIf("Ub")) {
+    (void)parseNumber();
+    if (!consumeIf('_'))
+      return nullptr;
+    return make<NameType>("'block-literal'");
+  }
   return nullptr;
 }
 
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index 09ba043..be0b7b0 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29759,6 +29759,8 @@
     // Darwin adds leading underscores to symbols, just demangle them anyways.
     {"____Z3foo_block_invoke.25", "invocation function for block in foo"},
     {"__Z1fv", "f()"},
+
+    {"_Z2tfIZUb_E1SEiv", "int tf<'block-literal'::S>()"}
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);