public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context
@ 2020-12-19 5:58 ensadc at mailnesia dot com
2021-02-04 11:04 ` [Bug c++/98388] " redi at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: ensadc at mailnesia dot com @ 2020-12-19 5:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
Bug ID: 98388
Summary: Throwing move-only parameter results in hard error in
SFINAE context
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ensadc at mailnesia dot com
Target Milestone: ---
https://godbolt.org/z/xn8fYz
====
struct moveonly {
moveonly() = default;
moveonly(moveonly&&) = default;
};
template<class T>
constexpr auto is_throwable(T t) -> decltype(throw t, true) {
return true;
}
template<class T>
constexpr bool is_throwable(...) { return false; }
constexpr bool b = is_throwable<moveonly>(moveonly{});
====
<source>: In substitution of 'template<class T> constexpr decltype
((<throw-expression>, true)) is_throwable(T) [with T = moveonly]':
<source>:13:43: required from here
<source>:7:46: error: use of deleted function 'constexpr
moveonly::moveonly(const moveonly&)'
7 | constexpr auto is_throwable(T t) -> decltype(throw t, true) {
| ^~~~~~~
<source>:1:8: note: 'constexpr moveonly::moveonly(const moveonly&)' is
implicitly declared as deleted because 'moveonly' declares a move constructor
or move assignment operator
1 | struct moveonly {
| ^~~~~~~~
<source>:7:52: note: in thrown expression
7 | constexpr auto is_throwable(T t) -> decltype(throw t, true) {
| ^
====
I'm not sure what the value of `b` should be, but I believe that it should not
be a hard error. (Clang and MSVC initialize `b` to `true`.)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/98388] Throwing move-only parameter results in hard error in SFINAE context
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
@ 2021-02-04 11:04 ` redi at gcc dot gnu.org
2024-02-07 15:34 ` mpolacek at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: redi at gcc dot gnu.org @ 2021-02-04 11:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2021-02-04
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/98388] Throwing move-only parameter results in hard error in SFINAE context
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
2021-02-04 11:04 ` [Bug c++/98388] " redi at gcc dot gnu.org
@ 2024-02-07 15:34 ` mpolacek at gcc dot gnu.org
2024-02-09 21:38 ` cvs-commit at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-02-07 15:34 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |mpolacek at gcc dot gnu.org
Status|NEW |ASSIGNED
CC| |mpolacek at gcc dot gnu.org
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/98388] Throwing move-only parameter results in hard error in SFINAE context
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
2021-02-04 11:04 ` [Bug c++/98388] " redi at gcc dot gnu.org
2024-02-07 15:34 ` mpolacek at gcc dot gnu.org
@ 2024-02-09 21:38 ` cvs-commit at gcc dot gnu.org
2024-02-09 21:43 ` mpolacek at gcc dot gnu.org
2024-02-16 17:13 ` mpolacek at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-02-09 21:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:
https://gcc.gnu.org/g:3a3e0f1b46a3ad71ebeedc419393e3a36f1ce6db
commit r14-8903-g3a3e0f1b46a3ad71ebeedc419393e3a36f1ce6db
Author: Marek Polacek <polacek@redhat.com>
Date: Tue Feb 6 15:35:16 2024 -0500
c++: make build_throw SFINAE-friendly [PR98388]
Here the problem is that we give hard errors while substituting
template parameters during overload resolution of is_throwable
which has an invalid throw in decltype.
The backtrace shows that fn_type_unification -> instantiate_template
-> tsubst* passes complain=0 as expected, but build_throw doesn't
have a complain parameter. So let's add one. Also remove a redundant
local variable which I should have removed in my P2266 patch.
There's still one problem for which I opened
<https://gcc.gnu.org/PR113853>.
We need to patch up treat_lvalue_as_rvalue_p and remove the dg-bogus.
Thanks to Patrick for notifying me of this PR. This doesn't fully fix
113789; there I think I'll have to figure our why a candidate wasn't
discarded from the overload set.
PR c++/98388
gcc/cp/ChangeLog:
* coroutines.cc (coro_rewrite_function_body): Pass
tf_warning_or_error
to build_throw.
(morph_fn_to_coro): Likewise.
* cp-tree.h (build_throw): Adjust.
* except.cc (expand_end_catch_block): Pass tf_warning_or_error to
build_throw.
(build_throw): Add a tsubst_flags_t parameter. Use it. Remove
redundant variable. Guard an inform call.
* parser.cc (cp_parser_throw_expression): Pass tf_warning_or_error
to build_throw.
* pt.cc (tsubst_expr) <case THROW_EXPR>: Pass complain to
build_throw.
libcc1/ChangeLog:
* libcp1plugin.cc (plugin_build_unary_expr): Pass tf_error to
build_throw.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/sfinae69.C: New test.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/98388] Throwing move-only parameter results in hard error in SFINAE context
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
` (2 preceding siblings ...)
2024-02-09 21:38 ` cvs-commit at gcc dot gnu.org
@ 2024-02-09 21:43 ` mpolacek at gcc dot gnu.org
2024-02-16 17:13 ` mpolacek at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-02-09 21:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=113853
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Mostly fixed, but bug 113853 remains.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/98388] Throwing move-only parameter results in hard error in SFINAE context
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
` (3 preceding siblings ...)
2024-02-09 21:43 ` mpolacek at gcc dot gnu.org
@ 2024-02-16 17:13 ` mpolacek at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-02-16 17:13 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98388
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Should be fixed now.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-02-16 17:13 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-19 5:58 [Bug c++/98388] New: Throwing move-only parameter results in hard error in SFINAE context ensadc at mailnesia dot com
2021-02-04 11:04 ` [Bug c++/98388] " redi at gcc dot gnu.org
2024-02-07 15:34 ` mpolacek at gcc dot gnu.org
2024-02-09 21:38 ` cvs-commit at gcc dot gnu.org
2024-02-09 21:43 ` mpolacek at gcc dot gnu.org
2024-02-16 17:13 ` mpolacek at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).