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