Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/coroutines/torture/lambda-10-mutable.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 } // lambda with mutable closure object. #include "../coro.h" // boiler-plate for tests of codegen #include "../coro1-ret-int-yield-int.h" /* Creates a coro lambda with a mutable closure and suspend-always initial suspend. */ auto make_co_lambda () { return [i = 1] () mutable -> coro1 { co_return i++; }; } /* We make this behave sequentially for the purposes of testing. */ int main() { auto co_l = make_co_lambda (); auto v1 = co_l (); auto v2 = co_l (); auto v3 = co_l (); v3.handle.resume(); v2.handle.resume(); v1.handle.resume(); int res1 = v1.handle.promise().get_value (); int res2 = v2.handle.promise().get_value (); int res3 = v3.handle.promise().get_value (); PRINTF ("main: co-lambda %d, %d, %d\n",res1, res2, res3); if ( res1 != 3 || res2 != 2 || res3 != 1) { PRINT ("main: bad return value."); abort (); } if (!v1.handle.done() || !v2.handle.done() || !v3.handle.done()) { PRINT ("main: apparently something was not done..."); abort (); } PRINT ("main: done."); }