1 // { dg-do run } 2 3 // lambda with parm and local state 4 5 #include "../coro.h" 6 7 // boiler-plate for tests of codegen 8 #include "../coro1-ret-int-yield-int.h" 9 main()10int main () 11 { 12 int a_copy = 20; 13 int a_ref = 10; 14 15 auto f = [&, a_copy]() -> coro1 16 { 17 co_return a_ref + a_copy; 18 }; 19 20 { 21 coro1 A = f (); 22 A.handle.resume(); 23 PRINT ("main: [a_copy = 20, a_ref = 10]"); 24 25 int y = A.handle.promise().get_value(); 26 if (y != 30) 27 { 28 PRINTF ("main: A co-ret = %d, should be 30\n", y); 29 abort (); 30 } 31 } 32 33 a_copy = 5; 34 a_ref = 7; 35 36 coro1 B = f (); 37 B.handle.resume(); 38 PRINT ("main: [a_copy = 5, a_ref = 7]"); 39 40 int y = B.handle.promise().get_value(); 41 if (y != 27) 42 { 43 PRINTF ("main: B co-ret = %d, should be 27\n", y); 44 abort (); 45 } 46 47 return 0; 48 } 49