https://gcc.gnu.org/g:6cd9887c01dad86e821187e8143c01a2fb420a1c

commit r16-8395-g6cd9887c01dad86e821187e8143c01a2fb420a1c
Author: Jakub Jelinek <[email protected]>
Date:   Wed Apr 1 19:19:19 2026 +0200

    c++: Change ^^:: mangling from LDmngE to LDmgsE
    
    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.
    
    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.
    
    Reviewed-by: Jason Merrill <[email protected]>

Diff:
---
 gcc/cp/mangle.cc                       | 4 ++--
 gcc/cp/reflect.cc                      | 2 +-
 gcc/testsuite/g++.dg/reflect/mangle1.C | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
index 24e1cefbd324..17ffacd5952d 100644
--- a/gcc/cp/mangle.cc
+++ b/gcc/cp/mangle.cc
@@ -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)
diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc
index b30b4b82087e..670d84afb67a 100644
--- a/gcc/cp/reflect.cc
+++ b/gcc/cp/reflect.cc
@@ -8884,7 +8884,7 @@ reflection_mangle_prefix (tree refl, char prefix[3])
     {
       if (h == global_namespace)
        {
-         strcpy (prefix, "ng");
+         strcpy (prefix, "gs");
          return NULL_TREE;
        }
       strcpy (prefix, "ns");
diff --git a/gcc/testsuite/g++.dg/reflect/mangle1.C 
b/gcc/testsuite/g++.dg/reflect/mangle1.C
index 16e027d4b3dd..8e1d5d768953 100644
--- a/gcc/testsuite/g++.dg/reflect/mangle1.C
+++ b/gcc/testsuite/g++.dg/reflect/mangle1.C
@@ -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" } }

Reply via email to