public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@suse.com>
To: ibuclaw@gdcproject.org
Cc: Ian Lance Taylor <ian@airs.com>, "gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: libiberty D tuple demangling
Date: Mon, 25 Jul 2022 17:57:06 +0200	[thread overview]
Message-ID: <225e0c1c-03ed-3633-2fb4-1cb5eae04596@suse.com> (raw)
In-Reply-To: <1574845149.11500.1658763923107@office.mailbox.org>

On 25.07.2022 17:45, ibuclaw@gdcproject.org wrote:
>> On 25/07/2022 14:13 CEST Jan Beulich <jbeulich@suse.com> wrote:
>>
>>  
>> On 25.07.2022 14:05, ibuclaw@gdcproject.org wrote:
>>>> On 25/07/2022 08:45 CEST Jan Beulich <jbeulich@suse.com> wrote:
>>>> while commit 3f30a274913b ("libiberty: Update D symbol demangling
>>>> for latest ABI spec") mentions in its description that tuple encoding
>>>> has changed, there's no real adjustment to dlang_parse_tuple() there,
>>>> nor are there any new (or replaced) test cases for that. Was this
>>>> simply overlooked?
>>>
>>> Is there any specific example that fails to demangle, or are you just skimming?
>>
>> I'm merely looking at the code alongside the ABI spec.
>>
>>> From what I recall, there is a couple places in the dlang_demangle parser that handle ambiguities in a mangled symbol.  The ABI change only added a terminating 'Z', which makes said code that handles ambiguity redundant - but of course kept around so we handle both old and new symbols.
>>
>> It's not just the addition of Z at the end but also the dropping of the
>> number of elements at the beginning, aiui. It's actually that aspect
>> which caught my attention, since the ABI doesn't talk about any number
>> there, but the code fetches one.
>>
> 
> Went to have a look at docarchives, but it appears to be down (that's on me, I have been meaning to migrate the service to new servers).
> 
> Yes, your right, the number was indeed dropped too from the ABI.
> 
> https://web.archive.org/web/20170812061158/https://dlang.org/spec/abi.html#TypeTuple
> 
>     TypeTuple:
>         B Number Parameters
> 
> https://dlang.org/spec/abi.html#TypeTuple
> 
>     TypeTuple:
>         B Parameters Z
> 
> However, it gets worse the more I stare at it. Looks like it was not understood what 'Number' meant in the old ABI. I assumed it was the encoded number of tuple elements - same as static arrays - however what I see in the front-end is instead an encoded buffer length.
> 
> https://github.com/gcc-mirror/gcc/blob/releases/gcc-10/gcc/d/dmd/dmangle.c#L312-L313
> 
> So the loop should instead be more like:
> ---
>   unsigned long len;
> 
>   mangled = dlang_number (mangled, &len);
>   if (mangled == NULL)
>     return NULL;
> 
>   string_append (decl, "Tuple!(");
> 
>   const char *endp = mangled + len;
>   int elements = 0;
>   while (mangled != endp)
>     {
>       if (elements++)
>         string_append (decl, ", ");
> 
>       mangled = dlang_type (decl, mangled, info);
>       if (mangled == NULL || mangled > endp)
> 	return NULL;
>     }
> 
>   string_append (decl, ")");
>   return mangled;
> ---

Oh. Then two of the testcases are actually wrong as well:

_D8demangle4testFB2OaaZv
_D8demangle4testFB3aDFZaaZv

I would have assumed they had been taken from observable output of a
compiler, ...

> On top of that, TypeTuple is a compile-time-only type - it never leaks to the code generator - so the grammar entry in the ABI is frivolous (although internally, that it gets a mangle at all would save some memory as duplicated types are merged).

... but one way of reading this would make me infer that can't have
been the case.

Jan

      reply	other threads:[~2022-07-25 15:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <f35a2359-e102-7682-65b4-e56e602f9adf@aol.com>
2022-07-25  6:45 ` Jan Beulich
2022-07-25 12:05   ` ibuclaw
2022-07-25 12:13     ` Jan Beulich
2022-07-25 15:45       ` ibuclaw
2022-07-25 15:57         ` Jan Beulich [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=225e0c1c-03ed-3633-2fb4-1cb5eae04596@suse.com \
    --to=jbeulich@suse.com \
    --cc=gcc@gcc.gnu.org \
    --cc=ian@airs.com \
    --cc=ibuclaw@gdcproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).