On Wed, Apr 01, 2026 at 11:59:57AM +0200, Jakub Jelinek wrote:
> Hi!
> 
> In
> https://github.com/itanium-cxx-abi/cxx-abi/issues/208#issuecomment-3518384358
> Richard Smith suggested (among other things) to use gs instead of ng
> for ^^:: mangling, because gs is already used elsewhere in the grammar for
> similar purposes (like [gs] nw <expression>* _ <type> E etc.).
> 
> This patch changes that, plus added the part I forgot to update when
> mangling the annotations.
> 
> Tested on x86_64-linux, ok for trunk?

Looks good to me!
 
> Note, in
> https://github.com/itanium-cxx-abi/cxx-abi/issues/208#issuecomment-3571323241
> Tim Song mentioned that perhaps for L Dm ta ... E we should be including
> both the <alias prefix> and underlying <type> (probably with some
> separation), because different TUs could have different aliases.  Or shall
> all decls which refer to type aliases be TU local?
> 
> 2026-04-01  Jakub Jelinek  <[email protected]>
> 
>       * mangle.cc (write_reflection): Change ^^:: mangling in grammar
>       from LDmngE to LDmgsE.
>       * reflect.cc (reflection_mangle_prefix): Set prefix to "gs" rather
>       than "ng" for global_namespace.
> 
>       * g++.dg/reflect/mangle1.C: Expect _Z3barILi310ELDmgsEEvv
>       rather than _Z3barILi310ELDmngEEvv.
> 
> --- gcc/cp/mangle.cc.jj       2026-04-01 11:27:32.663770476 +0200
> +++ gcc/cp/mangle.cc  2026-04-01 11:32:45.081468378 +0200
> @@ -4145,11 +4145,11 @@ write_expression (tree expr)
>                 ::= co [ <prefix> ] <unqualified-name> # concept
>                 ::= na [ <prefix> ] <unqualified-name> # namespace alias
>                 ::= ns [ <prefix> ] <unqualified-name> # namespace
> -               ::= ng                                # ^^::
> +               ::= gs                                # ^^::
>                 ::= ba [ <nonnegative number> ] _ <type> # dir. base cls rel
>                 ::= ds <type> _ [ <unqualified-name> ] _
>                     [ <alignment number> ] _ [ <bit-width number> ] _
> -                   [ n ]                             # data member spec  */
> +                   [ n ] <template-arg>*             # data member spec  */
>  
>  static void
>  write_reflection (tree refl)
> --- gcc/cp/reflect.cc.jj      2026-04-01 11:27:32.664770459 +0200
> +++ gcc/cp/reflect.cc 2026-04-01 11:31:20.848897905 +0200
> @@ -8884,7 +8884,7 @@ reflection_mangle_prefix (tree refl, cha
>      {
>        if (h == global_namespace)
>       {
> -       strcpy (prefix, "ng");
> +       strcpy (prefix, "gs");
>         return NULL_TREE;
>       }
>        strcpy (prefix, "ns");
> --- gcc/testsuite/g++.dg/reflect/mangle1.C.jj 2026-04-01 00:03:32.626480833 
> +0200
> +++ gcc/testsuite/g++.dg/reflect/mangle1.C    2026-04-01 11:33:18.949893591 
> +0200
> @@ -246,7 +246,7 @@ baz (int x)
>  // { dg-final { scan-assembler "_Z3barILi291ELDmna3NS27NSAliasEEvv" } }
>  // { dg-final { scan-assembler "_Z3barILi300ELDmns2NSEEvv" } }
>  // { dg-final { scan-assembler "_Z3barILi301ELDmns3NS23NS3EEvv" } }
> -// { dg-final { scan-assembler "_Z3barILi310ELDmngEEvv" } }
> +// { dg-final { scan-assembler "_Z3barILi310ELDmgsEEvv" } }
>  // { dg-final { scan-assembler "_Z3barILi320ELDmba_1SEEvv" } }
>  // { dg-final { scan-assembler "_Z3barILi321ELDmba_N3NS21SEEEvv" } }
>  // { dg-final { scan-assembler "_Z3barILi322ELDmba_N3NS21WIiEEEEvv" } }
> 
>       Jakub
> 

Marek

Reply via email to