public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases. @ 2020-05-08 9:41 iains at gcc dot gnu.org 2020-05-08 9:42 ` [Bug c++/95003] " iains at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: iains at gcc dot gnu.org @ 2020-05-08 9:41 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 Bug ID: 95003 Summary: coroutines: Wrong code for some reference capture cases. Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: iains at gcc dot gnu.org Target Milestone: --- Created attachment 48479 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48479&action=edit patch under test The following code does not work correctly, the loop is executed but the loop body is discarded during gimplifcation. There are several places where we insert bind expressions while making the coroutine AST transforms. These should be marked as having side-effects where relevant, which had been omitted - leading to the fail - since, at least in some cases, such bind expressions are dropped during gimplification. struct Awaitable { int v; Awaitable (int _v) : v(_v) {} bool await_ready() { return false; } void await_suspend(std::coroutine_handle<coro1::promise_type>) {} int await_resume() { return v; } auto operator co_await() { return *this; } }; coro1 my_coro (int x) { int sum = 0; for (unsigned i = 0; i < 100; ++i) { sum += co_await Awaitable{x+1}; } co_return sum; } ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/95003] coroutines: Wrong code for some reference capture cases. 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org @ 2020-05-08 9:42 ` iains at gcc dot gnu.org 2020-05-08 19:47 ` cvs-commit at gcc dot gnu.org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: iains at gcc dot gnu.org @ 2020-05-08 9:42 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 Iain Sandoe <iains at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Keywords| |wrong-code Target Milestone|--- |10.2 Last reconfirmed| |2020-05-08 Assignee|unassigned at gcc dot gnu.org |iains at gcc dot gnu.org Status|UNCONFIRMED |NEW ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/95003] coroutines: Wrong code for some reference capture cases. 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org 2020-05-08 9:42 ` [Bug c++/95003] " iains at gcc dot gnu.org @ 2020-05-08 19:47 ` cvs-commit at gcc dot gnu.org 2020-05-09 10:43 ` iains at gcc dot gnu.org ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: cvs-commit at gcc dot gnu.org @ 2020-05-08 19:47 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 --- Comment #1 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Iain D Sandoe <iains@gcc.gnu.org>: https://gcc.gnu.org/g:234681eadf2c51d7b78270188d64601b7267330d commit r11-208-g234681eadf2c51d7b78270188d64601b7267330d Author: Iain Sandoe <iain@sandoe.co.uk> Date: Sun May 3 14:20:13 2020 +0100 coroutines: Update TREE_SIDE_EFFECTS on inserted bind exprs. There are several places where we insert bind expressions while making the coroutine AST transforms. These should be marked as having side-effects where relevant, which had been omitted. This leads to at least one failure in the cppcoros test suite, where a loop body is dropped in gimplification because it is not marked. gcc/cp/ChangeLog: 2020-05-08 Iain Sandoe <iain@sandoe.co.uk> PR c++/95003 * coroutines.cc (build_actor_fn): Ensure that bind scopes are marked as having side-effects where necessary. (replace_statement_captures): Likewise. (morph_fn_to_coro): Likewise. gcc/testsuite/ChangeLog: 2020-05-08 Iain Sandoe <iain@sandoe.co.uk> PR c++/95003 * g++.dg/coroutines/torture/pr95003.C: New test. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/95003] coroutines: Wrong code for some reference capture cases. 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org 2020-05-08 9:42 ` [Bug c++/95003] " iains at gcc dot gnu.org 2020-05-08 19:47 ` cvs-commit at gcc dot gnu.org @ 2020-05-09 10:43 ` iains at gcc dot gnu.org 2020-05-10 15:56 ` cvs-commit at gcc dot gnu.org 2020-05-13 16:56 ` iains at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: iains at gcc dot gnu.org @ 2020-05-09 10:43 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 Iain Sandoe <iains at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |lewissbaker.opensource@gmai | |l.com --- Comment #2 from Iain Sandoe <iains at gcc dot gnu.org> --- *** Bug 95017 has been marked as a duplicate of this bug. *** ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/95003] coroutines: Wrong code for some reference capture cases. 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org ` (2 preceding siblings ...) 2020-05-09 10:43 ` iains at gcc dot gnu.org @ 2020-05-10 15:56 ` cvs-commit at gcc dot gnu.org 2020-05-13 16:56 ` iains at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: cvs-commit at gcc dot gnu.org @ 2020-05-10 15:56 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 --- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-10 branch has been updated by Iain D Sandoe <iains@gcc.gnu.org>: https://gcc.gnu.org/g:f09d898296c02d023ec51489fd233075ac553fd4 commit r10-8127-gf09d898296c02d023ec51489fd233075ac553fd4 Author: Iain Sandoe <iain@sandoe.co.uk> Date: Sun May 10 14:20:13 2020 +0100 coroutines: Update TREE_SIDE_EFFECTS on inserted bind exprs. There are several places where we insert bind expressions while making the coroutine AST transforms. These should be marked as having side-effects where relevant, which had been omitted. This leads to at least one failure in the cppcoros test suite, where a loop body is dropped in gimplification because it is not marked. gcc/cp/ChangeLog: 2020-05-10 Iain Sandoe <iain@sandoe.co.uk> Backported from mainline 2020-05-08 Iain Sandoe <iain@sandoe.co.uk> PR c++/95003 * coroutines.cc (build_actor_fn): Ensure that bind scopes are marked as having side-effects where necessary. (replace_statement_captures): Likewise. (morph_fn_to_coro): Likewise. gcc/testsuite/ChangeLog: 2020-05-10 Iain Sandoe <iain@sandoe.co.uk> Backported from mainline 2020-05-08 Iain Sandoe <iain@sandoe.co.uk> PR c++/95003 * g++.dg/coroutines/torture/pr95003.C: New test. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/95003] coroutines: Wrong code for some reference capture cases. 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org ` (3 preceding siblings ...) 2020-05-10 15:56 ` cvs-commit at gcc dot gnu.org @ 2020-05-13 16:56 ` iains at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: iains at gcc dot gnu.org @ 2020-05-13 16:56 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95003 Iain Sandoe <iains at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|NEW |RESOLVED --- Comment #4 from Iain Sandoe <iains at gcc dot gnu.org> --- so fixed for master and 10.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-05-13 16:56 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-05-08 9:41 [Bug c++/95003] New: coroutines: Wrong code for some reference capture cases iains at gcc dot gnu.org 2020-05-08 9:42 ` [Bug c++/95003] " iains at gcc dot gnu.org 2020-05-08 19:47 ` cvs-commit at gcc dot gnu.org 2020-05-09 10:43 ` iains at gcc dot gnu.org 2020-05-10 15:56 ` cvs-commit at gcc dot gnu.org 2020-05-13 16:56 ` iains 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).