Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/coroutines/torture/pr95003.C @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
line wrap: on
line source
// { dg-do run } #include "../coro.h" #include "../coro1-ret-int-yield-int.h" // This tests that, when we insert bind scopes to contain variables that // have been promoted from compiler temporaries to extend their lifetimes // to a containing full expression, the inserted bind scopes have their // tree-side-effects set. 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; } int main () { PRINT ("main: create coro1"); struct coro1 f_coro = my_coro (0); PRINT ("main: OK -- looping"); do { f_coro.handle.resume(); } while (!f_coro.handle.done()); int y = f_coro.handle.promise().get_value(); if (y != 100) { PRINTF ("main: y is wrong : %d, should be 100\n", y); abort (); } puts ("main: done"); return 0; }