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()10 int 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