d-demangle.c (dlang_template_args): Skip over specialized template parameters in...
authorIain Buclaw <ibuclaw@gdcproject.org>
Sat, 16 May 2015 16:50:19 +0000 (16:50 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Sat, 16 May 2015 16:50:19 +0000 (16:50 +0000)
libiberty/ChangeLog:

2015-05-16  Iain Buclaw  <ibuclaw@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.

From-SVN: r223246

libiberty/ChangeLog
libiberty/d-demangle.c
libiberty/testsuite/d-demangle-expected

index 110745df8948a2b9bd54c3139ea2dc909a84d04b..945551eb3a9b68798ce3f0df8d61f0a30f102e7d 100644 (file)
@@ -1,3 +1,10 @@
+2015-05-16  Iain Buclaw  <ibuclaw@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.
+
 2015-05-16  Iain Buclaw  <ibuclaw@gdcproject.org>
 
        * d-demangle.c (dlang_type): Handle cent and ucent types.
index 05f3a5e4b3052604a1a0543e685717b2a2917ea0..76051054dbcbc0f90c42235b1c6d6f001e6339b0 100644 (file)
@@ -1383,6 +1383,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.  */
index e3fd850862ec6e3cde0f99d2b5da80012d03a7f9..3182dc77bfb1d60149be4d6782552e08dd3d05ff 100644 (file)
@@ -630,6 +630,10 @@ _D8demangle19__T4testS6symbolTaZv
 demangle.test!(symbol, char)
 #
 --format=dlang
+_D8demangle12__T4testHTaZv
+demangle.test!(char)
+#
+--format=dlang
 _D8demangle13__T4testVPinZv
 demangle.test!(null)
 #
@@ -1050,3 +1054,7 @@ test.main().local()
 --format=dlang
 _D3std6socket12InternetHost221__T13getHostNoSyncVAyaa96_0a09202020206175746f2078203d2068746f6e6c28706172616d293b0a09202020206175746f206865203d20676574686f73746279616464722826782c20342c206361737428696e74294164647265737346616d696c792e494e4554293b0a09TkZ13getHostNoSyncMFkZb
 std.socket.InternetHost.getHostNoSync!("\n\t    auto x = htonl(param);\n\t    auto he = gethostbyaddr(&x, 4, cast(int)AddressFamily.INET);\n\t", uint).getHostNoSync(uint)
+#
+--format=dlang
+_D2gc6config13__T5parseHTfZ5parseFNbNiAxaKAxaKfZb
+gc.config.parse!(float).parse(const(char)[], ref const(char)[], ref float)