145
|
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
|
|
10 int 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 }
|