[Bug c++/122905] [16 regression] ODR warning with C++11 and C++20 std::string use since r16-3233-g7921bb4afcb7a3
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 1 16:55:07 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122905
--- Comment #14 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:4d1bfc66f84de6b37b175a191cba8cdd552c4383
commit r16-5802-g4d1bfc66f84de6b37b175a191cba8cdd552c4383
Author: Jakub Jelinek <jakub@redhat.com>
Date: Mon Dec 1 17:54:05 2025 +0100
c++: Fix ODR regressions caused by P2115R0 changes [PR122905]
The following testcase fails due to ODR warnings starting with the
r16-3233 change (P2115R0 PR120503 implementation).
The problem is that for C++20 we mangle differently the anonymous
union at the class scope from C++17, in C++17 the
unnamed enumeration that has an enumerator as a name for linkage purposes
before it is counted as TYPE_UNNAMED_P in nested_anon_class_index,
but for C++20 it is not, therefore the ODR warning.
While the term defined in https://eel.is/c++draft/dcl.enum#12.sentence-2
is defined for all enum types, its only use in
https://eel.is/c++draft/basic.link#4.5 is solely for enumeration types at
namespace scope, changing anything for those at class scope or block scope
has undesirable ABI consequences.
2025-12-01 Jakub Jelinek <jakub@redhat.com>
PR c++/122905
* decl.cc (enum_with_enumerator_for_linkage_p): Only return true
for namespace scope types.
* g++.dg/lto/pr122905.h: New file.
* g++.dg/lto/pr122905_0.C: New test.
* g++.dg/lto/pr122905_1.C: New test.
More information about the Gcc-bugs
mailing list