diff options
-rw-r--r-- | libcxxabi/src/demangle/ItaniumDemangle.h | 6 | ||||
-rw-r--r-- | libcxxabi/test/test_demangle.pass.cpp | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Demangle/ItaniumDemangle.h | 6 |
3 files changed, 14 insertions, 0 deletions
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h index 9a54ff5d80d..f35c062cd6d 100644 --- a/libcxxabi/src/demangle/ItaniumDemangle.h +++ b/libcxxabi/src/demangle/ItaniumDemangle.h @@ -2480,6 +2480,12 @@ AbstractManglingParser<Derived, Alloc>::parseUnnamedTypeName(NameState *) { 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/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp index 09ba0434841..be0b7b0fde8 100644 --- a/libcxxabi/test/test_demangle.pass.cpp +++ b/libcxxabi/test/test_demangle.pass.cpp @@ -29759,6 +29759,8 @@ const char* cases[][2] = // 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]); diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h index 9a54ff5d80d..f35c062cd6d 100644 --- a/llvm/include/llvm/Demangle/ItaniumDemangle.h +++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h @@ -2480,6 +2480,12 @@ AbstractManglingParser<Derived, Alloc>::parseUnnamedTypeName(NameState *) { return nullptr; return make<ClosureTypeName>(Params, Count); } + if (consumeIf("Ub")) { + (void)parseNumber(); + if (!consumeIf('_')) + return nullptr; + return make<NameType>("'block-literal'"); + } return nullptr; } |