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).