]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: canonicity of fn types w/ instantiated eh specs [PR115223]
authorPatrick Palka <ppalka@redhat.com>
Wed, 29 May 2024 08:49:37 +0000 (04:49 -0400)
committerPatrick Palka <ppalka@redhat.com>
Wed, 29 May 2024 08:49:37 +0000 (04:49 -0400)
commit58b8c87b7fb281e35a6817cc91a292096fdc02dc
tree363938a2a68eb8ced18394711caf18ce18bed647
parent2f97d98d174e3ef9f3a9a83c179d787abde5e066
c++: canonicity of fn types w/ instantiated eh specs [PR115223]

When propagating structural equality in build_cp_fntype_variant, we
should consider structural equality of the exception-less variant, not
of the given type which might use structural equality only because it
has a (complex) noexcept-spec that we're intending to replace, as in
maybe_instantiate_noexcept which calls build_exception_variant using
the deferred-noexcept function type.  Otherwise we might pessimistically
use structural equality for a function type with a simple instantiated
noexcept-spec, leading to a LTO-triggered type verification failure if we
later use that (structural-equality) type as the canonical version of
some other variant.

PR c++/115223

gcc/cp/ChangeLog:

* tree.cc (build_cp_fntype_variant): Propagate structural
equality of the exception-less variant.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/noexcept87.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/tree.cc
gcc/testsuite/g++.dg/cpp0x/noexcept87.C [new file with mode: 0644]