Index: lib/Demangle/Demangle.cpp =================================================================== --- lib/Demangle/Demangle.cpp +++ lib/Demangle/Demangle.cpp @@ -15,7 +15,8 @@ std::string llvm::demangle(const std::string &MangledName) { char *Demangled; - if (MangledName.compare(0, 2, "_Z") == 0) + if (MangledName.compare(0, 2, "_Z") == 0 || + MangledName.compare(0, 4, "___Z") == 0) Demangled = itaniumDemangle(MangledName.c_str(), nullptr, nullptr, nullptr); else Demangled = Index: unittests/Demangle/DemangleTest.cpp =================================================================== --- unittests/Demangle/DemangleTest.cpp +++ unittests/Demangle/DemangleTest.cpp @@ -14,6 +14,8 @@ TEST(Demangle, demangleTest) { EXPECT_EQ(demangle("_Z3fooi"), "foo(int)"); + EXPECT_EQ(demangle("___Z3fooi_block_invoke"), + "invocation function for block in foo(int)"); EXPECT_EQ(demangle("?foo@@YAXH@Z"), "void __cdecl foo(int)"); EXPECT_EQ(demangle("foo"), "foo"); }