One last thing that was added in the next D version's ABI (and I subsequently missed).
This is a trivial patch to just ignore the new mangle symbol. --- libiberty/ChangeLog: 2015-05-13 Iain Buclaw <ibuc...@gdcproject.org> * d-demangle.c (dlang_template_args): Skip over specialized template parameters in mangled symbol. * testsuite/d-demangle-expected: Add coverage and unittest for specialized template parameters.
--- libiberty/d-demangle.c | 4 ++++ libiberty/testsuite/d-demangle-expected | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 5c0f356..833f87a 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -1486,6 +1486,10 @@ dlang_template_args (string *decl, const char *mangled) if (n++) string_append (decl, ", "); + /* Skip over specialised template prefix. */ + if (*mangled == 'H') + mangled++; + switch (*mangled) { case 'S': /* Symbol parameter. */ diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 47746da..992ea4a 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -630,6 +630,10 @@ _D8demangle19__T4testS6symbolTaZv demangle.test!(symbol, char) # --format=dlang +_D8demangle12__T4testHTaZv +demangle.test!(char) +# +--format=dlang _D8demangle13__T4testVPinZv demangle.test!(null) # @@ -1074,3 +1078,7 @@ std.traits.fqnSym!(std).adjustIdent(immutable(char)[]) --format=dlang _D2rt8lifetime36__T14_d_newarrayOpTS13_d_newarrayiTZ14_d_newarrayOpTFNaNbxC8TypeInfomPmZAv rt.lifetime._d_newarrayOpT!(_d_newarrayiT)._d_newarrayOpT(const(TypeInfo), ulong, ulong*) +# +--format=dlang +_D2gc6config13__T5parseHTfZ5parseFNbNiAxaKAxaKfZb +gc.config.parse!(float).parse(const(char)[], ref const(char)[], ref float) -- 2.1.0