[itanium demangler] Support dot suffixes on block invocation functions

rdar://32378759

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@338747 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 1007d7e..3a7ee06 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -4935,6 +4935,8 @@
     bool RequireNumber = consumeIf('_');
     if (parseNumber().empty() && RequireNumber)
       return nullptr;
+    if (look() == '.')
+      First = Last;
     if (numLeft() != 0)
       return nullptr;
     return make<SpecialName>("invocation function for block in ", Encoding);
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index 305e179..7c1fd2d 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29753,6 +29753,8 @@
     // reference collapsing:
     {"_Z1fIR1SEiOT_", "int f<S&>(S&)"},
     {"_Z1fIJR1SS0_EEiDpOT_", "int f<S&, S>(S&, S&&)"},
+
+    {"___Z3foo_block_invoke.25", "invocation function for block in foo"},
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);