On May 5, 2014, at 10:02 AM, Richard Smith <[email protected]> wrote:
> On 5 May 2014 09:13, John McCall <[email protected]> wrote:
> On May 4, 2014, at 8:00 PM, David Majnemer <[email protected]> wrote:
> > The Itanium ABI does not seem to provide a mangling for reference 
> > temporaries.
> >
> > Consider the following:
> > struct A { const int (&x)[3]; };
> > struct B { const A (&x)[2]; };
> > template <typename T> B &&b = { { { { 1, 2, 3 } }, { { 4, 5, 6 } } } };
> > B &temp = b<void>;
> >
> > The temporaries created by instantiating b<void> must be the same in all 
> > translation units.
> >
> > To satisfy this requirement, I propose that we mangle the temporaries in 
> > lexical order using a mangling similar to what GCC 4.9 uses and identical 
> > to what trunk clang uses.
> 
> What does GCC do?
> 
> GCC trunk seems to use
> 
>   <special-name> ::= GR <object name> <nonnegative number>
> 
> where the first reference temporary gets number 0, and so on. It appears to 
> number them through a post-order tree walk of the expression. Older versions 
> of GCC did not add a number, IIRC.

Okay.  So we have two different manglings out there that both look basically 
the same except for an off-by-one and a major semantic ordering difference.  I 
think we should either standardize on one or the other or switch to a different 
prefix entirely.

Has the clang mangling actually been used in a released compiler, or did it 
just get implemented?

Hmm.  Putting a <number> after a <name> requires demangler lookahead, doesn’t 
it?

John.
_______________________________________________
cxx-abi-dev mailing list
[email protected]
http://sourcerytools.com/cgi-bin/mailman/listinfo/cxx-abi-dev

Reply via email to