1 // { dg-do run } 2 3 // Check co_return co_await 4 5 #include "../coro.h" 6 7 // boiler-plate for tests of codegen 8 #include "../coro1-ret-int-yield-int.h" 9 10 struct coro1 f()11f () noexcept 12 { 13 PRINT ("f: about to yield"); 14 co_yield co_await coro1::suspend_always_intprt(42); 15 16 PRINT ("f: about to return 6174"); 17 co_return 6174; 18 } 19 main()20int main () 21 { 22 PRINT ("main: create coro1"); 23 struct coro1 x = f (); 24 if (x.handle.done()) 25 abort(); 26 27 PRINT ("main: resuming (initial suspend)"); 28 x.handle.resume(); 29 PRINT ("main: resuming (await intprt)"); 30 x.handle.resume(); 31 32 PRINT ("main: after resume (2)"); 33 int y = x.handle.promise().get_value(); 34 if ( y != 42 ) 35 abort (); 36 PRINT ("main: apparently got 42"); 37 38 PRINT ("main: got coro1 - resuming (co_yield)"); 39 if (x.handle.done()) 40 abort(); 41 x.handle.resume(); 42 43 PRINT ("main: after resume (co_yield)"); 44 y = x.handle.promise().get_value(); 45 if ( y != 6174 ) 46 abort (); 47 PRINT ("main: apparently got 6174"); 48 if (!x.handle.done()) 49 { 50 PRINT ("main: apparently not done..."); 51 abort (); 52 } 53 PRINT ("main: returning"); 54 return 0; 55 } 56