public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers.
@ 2017-04-15 15:25 Iain Buclaw
  2017-04-20 19:11 ` Iain Buclaw
  0 siblings, 1 reply; 4+ messages in thread
From: Iain Buclaw @ 2017-04-15 15:25 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1224 bytes --]

This updates the implementation to reflect a part of the D ABI spec
that has been removed.  There should never be a bare integer value
encoded into a template argument list.  Integers are always prefixed
by `i' if they are positive or `N' if they are negative.

Have verified this indeed is the case using the code below, and
updated all coverage tests to match the compiler.

    module demangle;

    template test(alias T)
    {
        void test() { auto t = T; }
    }

    pragma(msg, (test!(cast(byte)123)).mangleof);
    pragma(msg, (test!(cast(int)123)).mangleof);
    pragma(msg, (test!(cast(short)123)).mangleof);
    pragma(msg, (test!(cast(ubyte)123)).mangleof);
    pragma(msg, (test!(cast(uint)123)).mangleof);
    pragma(msg, (test!(cast(ushort)123)).mangleof);
    pragma(msg, (test!(cast(long)123)).mangleof);
    pragma(msg, (test!(cast(ulong)123)).mangleof);
    pragma(msg, (test!(true)).mangleof);
    pragma(msg, (test!(false)).mangleof);
    pragma(msg, (test!('\x0a')).mangleof);
    pragma(msg, (test!(' ')).mangleof);
    pragma(msg, (test!('A')).mangleof);
    pragma(msg, (test!('~')).mangleof);
    pragma(msg, (test!('\u03e8')).mangleof);
    pragma(msg, (test!('\U000186a0')).mangleof);

---

[-- Attachment #2: 04-d-demangle-value-integers.patch --]
[-- Type: text/x-patch, Size: 3437 bytes --]

commit 30ff1ef529c4711ab08e168c79e4971cd44f17f4
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Apr 15 11:35:35 2017 +0200

    libiberty/ChangeLog:
    
    2017-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
    
    	* d-demangle.c (dlang_value): Remove fallthrough and cases for digits.
    	* testsuite/d-demangle-expected: Update integer value tests.

diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c
index 533653f..71be8fb 100644
--- a/libiberty/d-demangle.c
+++ b/libiberty/d-demangle.c
@@ -1242,9 +1242,6 @@ dlang_value (string *decl, const char *mangled, const char *name, char type)
       mangled++;
       if (*mangled < '0' || *mangled > '9')
 	return NULL;
-      /* Fall through */
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
       mangled = dlang_parse_integer (decl, mangled, type);
       break;
 
diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected
index 530e0e6..0692729 100644
--- a/libiberty/testsuite/d-demangle-expected
+++ b/libiberty/testsuite/d-demangle-expected
@@ -698,35 +698,35 @@ _D8demangle13__T4testVPinZv
 demangle.test!(null)
 #
 --format=dlang
-_D8demangle14__T4testVg123Zv
+_D8demangle15__T4testVgi123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVi123Zv
+_D8demangle15__T4testVii123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVs123Zv
+_D8demangle15__T4testVsi123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVh123Zv
+_D8demangle15__T4testVhi123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVk123Zv
+_D8demangle15__T4testVki123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVt123Zv
+_D8demangle15__T4testVti123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVl123Zv
+_D8demangle15__T4testVli123Zv
 demangle.test!(123L)
 #
 --format=dlang
-_D8demangle14__T4testVm123Zv
+_D8demangle15__T4testVmi123Zv
 demangle.test!(123uL)
 #
 --format=dlang
@@ -746,35 +746,35 @@ _D8demangle15__T4testVmN123Zv
 demangle.test!(-123uL)
 #
 --format=dlang
-_D8demangle12__T4testVb1Zv
+_D8demangle13__T4testVbi1Zv
 demangle.test!(true)
 #
 --format=dlang
-_D8demangle12__T4testVb0Zv
+_D8demangle13__T4testVbi0Zv
 demangle.test!(false)
 #
 --format=dlang
-_D8demangle13__T4testVa10Zv
+_D8demangle14__T4testVai10Zv
 demangle.test!('\x0a')
 #
 --format=dlang
-_D8demangle13__T4testVa32Zv
+_D8demangle14__T4testVai32Zv
 demangle.test!(' ')
 #
 --format=dlang
-_D8demangle13__T4testVa65Zv
+_D8demangle14__T4testVai65Zv
 demangle.test!('A')
 #
 --format=dlang
-_D8demangle14__T4testVa126Zv
+_D8demangle15__T4testVai126Zv
 demangle.test!('~')
 #
 --format=dlang
-_D8demangle15__T4testVu1000Zv
+_D8demangle16__T4testVui1000Zv
 demangle.test!('\u03e8')
 #
 --format=dlang
-_D8demangle17__T4testVw100000Zv
+_D8demangle18__T4testVwi100000Zv
 demangle.test!('\U000186a0')
 #
 --format=dlang
@@ -1076,7 +1076,7 @@ _D8demangle20__T2fnVAiA4i1i2i3i4Z2fnFZv
 demangle.fn!([1, 2, 3, 4]).fn()
 #
 --format=dlang
-_D8demangle10__T2fnVi1Z2fnFZv
+_D8demangle11__T2fnVii1Z2fnFZv
 demangle.fn!(1).fn()
 #
 --format=dlang
@@ -1104,7 +1104,7 @@ _D8demangle2fnFNgiZNgi
 demangle.fn(inout(int))
 #
 --format=dlang
-_D8demangle29__T2fnVa97Va9Va0Vu257Vw65537Z2fnFZv
+_D8demangle34__T2fnVai97Vai9Vai0Vui257Vwi65537Z2fnFZv
 demangle.fn!('a', '\x09', '\x00', '\u0101', '\U00010001').fn()
 #
 --format=dlang

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers.
  2017-04-15 15:25 [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers Iain Buclaw
@ 2017-04-20 19:11 ` Iain Buclaw
  2017-04-25 16:59   ` Iain Buclaw
  0 siblings, 1 reply; 4+ messages in thread
From: Iain Buclaw @ 2017-04-20 19:11 UTC (permalink / raw)
  To: gcc-patches

On 15 April 2017 at 17:24, Iain Buclaw <ibuclaw@gdcproject.org> wrote:
> This updates the implementation to reflect a part of the D ABI spec
> that has been removed.  There should never be a bare integer value
> encoded into a template argument list.  Integers are always prefixed
> by `i' if they are positive or `N' if they are negative.
>
> Have verified this indeed is the case using the code below, and
> updated all coverage tests to match the compiler.
>
>     module demangle;
>
>     template test(alias T)
>     {
>         void test() { auto t = T; }
>     }
>
>     pragma(msg, (test!(cast(byte)123)).mangleof);
>     pragma(msg, (test!(cast(int)123)).mangleof);
>     pragma(msg, (test!(cast(short)123)).mangleof);
>     pragma(msg, (test!(cast(ubyte)123)).mangleof);
>     pragma(msg, (test!(cast(uint)123)).mangleof);
>     pragma(msg, (test!(cast(ushort)123)).mangleof);
>     pragma(msg, (test!(cast(long)123)).mangleof);
>     pragma(msg, (test!(cast(ulong)123)).mangleof);
>     pragma(msg, (test!(true)).mangleof);
>     pragma(msg, (test!(false)).mangleof);
>     pragma(msg, (test!('\x0a')).mangleof);
>     pragma(msg, (test!(' ')).mangleof);
>     pragma(msg, (test!('A')).mangleof);
>     pragma(msg, (test!('~')).mangleof);
>     pragma(msg, (test!('\u03e8')).mangleof);
>     pragma(msg, (test!('\U000186a0')).mangleof);
>
> ---

Hmm, it seems like D compilers until 3 years ago infact used to mangle
in this way.  Better keep it around then for a little while longer for
compatibility.  I'll follow-up with an amendment which doesn't remove
the cases, instead adding an explanatory comment on why it's present,
but still fixing up the coverage tests anyway, as they should try to
reflect as close to actual mangling as possible.

--
Iain.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers.
  2017-04-20 19:11 ` Iain Buclaw
@ 2017-04-25 16:59   ` Iain Buclaw
  2017-04-28 17:42     ` Jeff Law
  0 siblings, 1 reply; 4+ messages in thread
From: Iain Buclaw @ 2017-04-25 16:59 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 526 bytes --]

On 20 April 2017 at 20:58, Iain Buclaw <ibuclaw@gdcproject.org> wrote:
>
> Hmm, it seems like D compilers until 3 years ago infact used to mangle
> in this way.  Better keep it around then for a little while longer for
> compatibility.  I'll follow-up with an amendment which doesn't remove
> the cases, instead adding an explanatory comment on why it's present,
> but still fixing up the coverage tests anyway, as they should try to
> reflect as close to actual mangling as possible.
>
> --
> Iain.

Attaching patch v2.

---

[-- Attachment #2: 04-demangle-value-integers-2.patch --]
[-- Type: text/x-patch, Size: 3290 bytes --]

Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Tue Apr 25 18:43:35 2017 +0200

    libiberty/ChangeLog:
    
    2017-04-15  Iain Buclaw  <ibuclaw@gdcproject.org>
    
    	* d-demangle.c (dlang_value): Fix comment to clarify why cases for
	digits are required.
    	* testsuite/d-demangle-expected: Update integer value tests.

diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c
index 12457f0..32633f5 100644
--- a/libiberty/d-demangle.c
+++ b/libiberty/d-demangle.c
@@ -1244,6 +1244,10 @@ dlang_value (string *decl, const char *mangled, const char *name, char type)
       if (*mangled < '0' || *mangled > '9')
 	return NULL;
       /* Fall through */
+
+    /* There really should always be an `i' before encoded numbers, but there
+       wasn't in early versions of D2, so this case range must remain for
+       backwards compatibility.  */
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
       mangled = dlang_parse_integer (decl, mangled, type);
diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected
index 04d39f4..616cf0f 100644
--- a/libiberty/testsuite/d-demangle-expected
+++ b/libiberty/testsuite/d-demangle-expected
@@ -650,35 +650,35 @@ _D8demangle13__T4testVPinZv
 demangle.test!(null)
 #
 --format=dlang
-_D8demangle14__T4testVg123Zv
+_D8demangle15__T4testVgi123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVi123Zv
+_D8demangle15__T4testVii123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVs123Zv
+_D8demangle15__T4testVsi123Zv
 demangle.test!(123)
 #
 --format=dlang
-_D8demangle14__T4testVh123Zv
+_D8demangle15__T4testVhi123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVk123Zv
+_D8demangle15__T4testVki123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVt123Zv
+_D8demangle15__T4testVti123Zv
 demangle.test!(123u)
 #
 --format=dlang
-_D8demangle14__T4testVl123Zv
+_D8demangle15__T4testVli123Zv
 demangle.test!(123L)
 #
 --format=dlang
-_D8demangle14__T4testVm123Zv
+_D8demangle15__T4testVmi123Zv
 demangle.test!(123uL)
 #
 --format=dlang
@@ -698,35 +698,35 @@ _D8demangle15__T4testVmN123Zv
 demangle.test!(-123uL)
 #
 --format=dlang
-_D8demangle12__T4testVb1Zv
+_D8demangle13__T4testVbi1Zv
 demangle.test!(true)
 #
 --format=dlang
-_D8demangle12__T4testVb0Zv
+_D8demangle13__T4testVbi0Zv
 demangle.test!(false)
 #
 --format=dlang
-_D8demangle13__T4testVa10Zv
+_D8demangle14__T4testVai10Zv
 demangle.test!('\x0a')
 #
 --format=dlang
-_D8demangle13__T4testVa32Zv
+_D8demangle14__T4testVai32Zv
 demangle.test!(' ')
 #
 --format=dlang
-_D8demangle13__T4testVa65Zv
+_D8demangle14__T4testVai65Zv
 demangle.test!('A')
 #
 --format=dlang
-_D8demangle14__T4testVa126Zv
+_D8demangle15__T4testVai126Zv
 demangle.test!('~')
 #
 --format=dlang
-_D8demangle15__T4testVu1000Zv
+_D8demangle16__T4testVui1000Zv
 demangle.test!('\u03e8')
 #
 --format=dlang
-_D8demangle17__T4testVw100000Zv
+_D8demangle18__T4testVwi100000Zv
 demangle.test!('\U000186a0')
 #
 --format=dlang
@@ -1020,7 +1020,7 @@ _D8demangle20__T2fnVAiA4i1i2i3i4Z2fnFZv
 demangle.fn!([1, 2, 3, 4]).fn()
 #
 --format=dlang
-_D8demangle10__T2fnVi1Z2fnFZv
+_D8demangle11__T2fnVii1Z2fnFZv
 demangle.fn!(1).fn()
 #
 --format=dlang

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers.
  2017-04-25 16:59   ` Iain Buclaw
@ 2017-04-28 17:42     ` Jeff Law
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff Law @ 2017-04-28 17:42 UTC (permalink / raw)
  To: Iain Buclaw, gcc-patches

On 04/25/2017 10:50 AM, Iain Buclaw wrote:
> On 20 April 2017 at 20:58, Iain Buclaw<ibuclaw@gdcproject.org>  wrote:
>> Hmm, it seems like D compilers until 3 years ago infact used to mangle
>> in this way.  Better keep it around then for a little while longer for
>> compatibility.  I'll follow-up with an amendment which doesn't remove
>> the cases, instead adding an explanatory comment on why it's present,
>> but still fixing up the coverage tests anyway, as they should try to
>> reflect as close to actual mangling as possible.
>>
>> --
>> Iain.
> Attaching patch v2.
> 
> ---
> 
> 
> 04-demangle-value-integers-2.patch
> 
> 
> Author: Iain Buclaw<ibuclaw@gdcproject.org>
> Date:   Tue Apr 25 18:43:35 2017 +0200
> 
>      libiberty/ChangeLog:
>      
>      2017-04-15  Iain Buclaw<ibuclaw@gdcproject.org>
>      
>      	* d-demangle.c (dlang_value): Fix comment to clarify why cases for
> 	digits are required.
>      	* testsuite/d-demangle-expected: Update integer value tests.
OK.
jeff

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-04-28 17:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-15 15:25 [PATCH 4/7] [D] libiberty: Remove wrongly spec'd mangle rule for encoded integers Iain Buclaw
2017-04-20 19:11 ` Iain Buclaw
2017-04-25 16:59   ` Iain Buclaw
2017-04-28 17:42     ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).