__cxa_demangle: allow demangling invocation blocks

The block invocation function uses an extension where the prefix is ___Z
as opposed to _Z.  This should make the tests pass again.

Disable a negative test which was testing a crasher.  The symbol being
demangled is not a valid mangled symbol and will return a nullptr.

Adjust the type info decoding test to be a valid symbol name.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@286793 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 8b9dfc9..4aeed1b 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -4980,11 +4980,14 @@
     }
 
     size_t len = std::strlen(mangled_name);
-    if (len < 2 || mangled_name[0] != '_' || mangled_name[1] != 'Z')
+    if (len < 2 || strncmp(mangled_name, "_Z", 2))
     {
-        if (status)
-            *status = invalid_mangled_name;
-        return nullptr;
+        if (len < 4 || strncmp(mangled_name, "___Z", 4))
+        {
+            if (status)
+                *status = invalid_mangled_name;
+            return nullptr;
+        }
     }
 
     size_t internal_size = buf != nullptr ? *n : 0;