On 8/14/20 10:43 PM, Alexandre Oliva wrote:
On Aug 14, 2020, Nathan Sidwell <nat...@acm.org> wrote:


Since you don't seem to have liked 'aka' either, how about 'nickname',
or 'nicknamed'?  A more convenient name to refer to an entity is exactly
what this is about, eh?

I'm sorry, I think those are awful names. They convey no intent. C++ already has at least 2 'nickname' mechanisms:

using bob = ::foo::bar<bob::random_type,int>;
auto &bill = ::elsewhere::object<some_type>;

'alias' is also now a confusing term, because of the concept of object-aliasing.

The existing alias attribute is defined as:

> The @code{alias} attribute causes the declaration to be emitted as an alias
> for another symbol, which must have been previously declared with the same
> type, and for variables, also the same size and alignment.  Declaring an alias
> with a different type than the target is undefined and may be diagnosed.  As
> an example, the following declarations:

I.e. it is creating a declaration that is aliased to some other symbol (which has to also be emitted by the same TU due to the usual elf-like object file semantics). Notice it says nothing about emitting a *symbol*.

The new attribute is emitting a symbol that equates the declaration it is attached to (i.e. the other way round).

Its intent is to allow code written in another language to refer to this definition. I imagine you'd commonly use the foreign language's mangling for the string provided.

If we spell it 'X', consider:

[[gnu::X ("other")]] int i;

Most commonly, the assembly emitted would contain:
        .globl other
        .equiv other, i

so, perhaps we should spell it 'equiv'?  That's using an existing term.

nathan

--
Nathan Sidwell

Reply via email to