[cxx-abi-dev] mangling of vendor extension, expression on function (not function type)

John McCall rjmccall at apple.com
Thu Jan 23 19:52:04 UTC 2014


On Jan 21, 2014, at 2:01 PM, Richard Smith <richardsmith at google.com> wrote:
> On 21 January 2014 09:36, John McCall <rjmccall at apple.com> wrote:
> On Jan 20, 2014, at 6:13 PM, Nick Lewycky <nlewycky at google.com> wrote:
> > I'm trying to mangle a vendor extension that encodes an expression which applies to function overload candidates, with the goal that a user running the demangler would see their expression demangled. While there are various vendor extension points, none of them allow me to go into encoding an expression, unless I stick a stray "decltype" in there, or similar (expression in a template argument that doesn't actually exist, etc.).
> >
> > The vendor extension is described in full here: http://clang.llvm.org/docs/LanguageExtensions.html#controlling-overload-resolution .
> >
> > I don't think I can do it without an extension to the mangling rules. As a strawman proposal, I suggest this:
> >
> > <type> ::= Ue <expression> E # vendor extended type qualifier
> 
> I think you mean
> 
>   <type> ::= Ue <source-name> <expression> E <type>
> 
> And this would be valuable for mangling e.g. dependent address space qualifiers, if anybody ever wants to do those.
> 
> We could generalize this slightly to
> 
>   <type> ::= U <source-name> <template-args> <type>
> 
> to allow multiple arguments (as types or expressions), dependent pack expansions, and so on.

That’s a bit more future-proof, I suppose, although I think it might stretch the definition of a type-qualifier to embed anything other than a value, and value pack-expansions are already part of the <expression> grammar.  You’re really asking for a “allow an arbitrarily complex type to be manufactured here” mangling.

> However, it feels really forced to add your feature, specifically, to <type>, since it can’t appear in an arbitrary position; it’s much closer to a qualified method name.  But the ref/cv-qualifiers area is only allowed in a <nested-name>, and you need to be able to do this on a top-level function, so I suppose extending <type> in a known-useful direction and then abusing <type> might be the best thing.
> 
> On the other hand, isn’t this a proposed direction for standardization?  I would have no problem with giving this a proper, non-vendor mangling just in case.
> 
> It's not proposed for standardization with this syntax, and it's likely that the final semantics will differ from the Clang extension in some ways (the proposed partial ordering rules for constraints are rather more complex, for instance), but it's close enough that it's an option worth considering.

Unless the feature is likely to diverge so much that it won’t even be an expression anymore, I don’t think this poses any problem for the ABI.

John.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://sourcerytools.com/pipermail/cxx-abi-dev/attachments/20140123/86ed6330/attachment.html>


More information about the cxx-abi-dev mailing list