https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113208

--- Comment #29 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Looking at t1 (i.e. the reduced testcase with constexpr), the difference with
-std=c++20 -O1 -fkeep-inline-functions is that in r14-5978 we used to emit
_ZN6vectorI12QualityValueEC2ERKS1_ in _ZN6vectorI12QualityValueEC5ERKS1_
comdat section and _ZN6vectorI12QualityValueEC1ERKS1_ as an alias to it (i.e.
the
r0-97383-g24b3ff2c53806d3d optimization), while with r14-5979 we don't optimize
it
any longer, i.e. emit _ZN6vectorI12QualityValueEC2ERKS1_ in
_ZN6vectorI12QualityValueEC2ERKS1_ comdat and
_ZN6vectorI12QualityValueEC2ERKS1_ in
_ZN6vectorI12QualityValueEC2ERKS1_ comdat.
I thought that ought to be ABI compatible (the latter is what we used to emit
before
r0-97383), all the involved symbols are weak and either linker keeps the
pair of symbols with the _ZN6vectorI12QualityValueEC5ERKS1_ comdat, or
one or both of the _ZN6vectorI12QualityValueEC[12]ERKS1_ comdats (depending on
if
just one or both of those symbols are used), or it keeps all of them and the
linker chooses between the 2 symbol definitions one that is actually used.

Of course, I'd like to understand why Marek's patch changed the behavior.

Reply via email to