1 // { dg-do run } 2 3 // lambda with initialized captures 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 14 auto f = [&a_ref = a_copy, a_copy = a_copy + 10]() -> coro1 15 { 16 a_ref += 20; 17 co_return a_ref + a_copy; 18 }; 19 20 { 21 coro1 A = f (); 22 A.handle.resume(); 23 if (a_copy != 40) 24 { 25 PRINT ("main: [a_copy = 40]"); 26 abort (); 27 } 28 29 int y = A.handle.promise().get_value(); 30 if (y != 70) 31 { 32 PRINTF ("main: A co-ret = %d, should be 70\n", y); 33 abort (); 34 } 35 } 36 37 a_copy = 5; 38 39 coro1 B = f (); 40 B.handle.resume(); 41 if (a_copy != 25) 42 { 43 PRINT ("main: [a_copy = 25]"); 44 abort (); 45 } 46 47 int y = B.handle.promise().get_value(); 48 if (y != 55) 49 { 50 PRINTF ("main: B co-ret = %d, should be 55\n", y); 51 abort (); 52 } 53 54 return 0; 55 } 56