https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118791
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jason at redhat dot com
--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to sandra from comment #3)
> Curiously, on the OG14 development branch the rvalue calls work but the
> lvalue ones are broken instead:
Confirmed with GCC 14.
This is caused by the following patch - which changes whether one or the
other fails in the static assert. Namely:
// FAILS with: 7eec6fedf45
// OK with dd3f3c71df6
int lvalue = 0;
lvalue_int<int&>(lvalue);
lvalue_const_int<int const&>(static_cast<int const&>(lvalue));
// OK for: 7eec6fedf45
// FAILS with dd3f3c71df6
rvalue_int<int&&>(0);
rvalue_const_int<int const&&>(static_cast<int const&&>(0));
* * *
The patch that caused the flip is:
r15-6707-gdd3f3c71df66ed
commit dd3f3c71df66ed6fd3872ab780f5813831100d1c (HEAD)
Author: Jason Merrill
AuthorDate: Mon Dec 23 19:57:56 2024 -0500
CommitDate: Wed Jan 8 16:34:58 2025 -0500
c++: fix conversion issues
Some issues caught by a check from another patch:
In the convert_like_internal bad_p handling, we are iterating from outside
to inside, so once we recurse into convert_like we need to stop looping.
In build_ramp_function, we're assigning REFERENCE_TYPE things, so we need
to
build the assignment directly rather than rely on functions that implement
C++ semantics.
In omp_declare_variant_finalize_one, the parameter object building failed
to
handle reference parms, and it seems simpler to just use build_stub_object
like other parts of the compiler.
gcc/cp/ChangeLog:
* call.cc (convert_like_internal): Add missing break.
* coroutines.cc (cp_coroutine_transform::build_ramp_function):
Build
INIT_EXPR directly.
* decl.cc (omp_declare_variant_finalize_one): Use
build_stub_object.
gcc/testsuite/ChangeLog:
* g++.dg/gomp/declare-variant-3.C: Don't depend on expr dump.
* g++.dg/gomp/declare-variant-5.C: Likewise.