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" } }
