annotate gcc/testsuite/g++.dg/coroutines/torture/func-params-07.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 // { dg-do run }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 // Test that we copy simple parms correctly by value, reference or
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 // rvalue reference.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 #include "../coro.h"
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 // boiler-plate for tests of codegen
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 #include "../coro1-refs-and-ctors.h"
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 coro1
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 my_coro (int v1, int& v2, int&& v3)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 co_yield v1 + v2 + v3;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 co_return v1 + v2 + v3;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 int main ()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 PRINT ("main: create coro1");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 int lv = 1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 int lvr = 2;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 coro1 x = my_coro (lv, lvr, lvr+2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 if (x.handle.done())
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 abort();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 x.handle.resume();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 PRINT ("main: after resume (initial suspend)");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 /* Now we should have the co_yielded value. */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 int y = x.handle.promise().get_value();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 if ( y != 7 )
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 PRINTF ("main: wrong result (%d).", y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 /* So we should be suspended at the yield, now change the
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 values so that we can determine that the reference persists
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 and the copy was made correctly. */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 lv = 5; // should be ignored
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 lvr = 3; // should be enacted
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 x.handle.resume();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 PRINT ("main: after resume (yield)");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 /* Now we should have the co_returned value. */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 y = x.handle.promise().get_value();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 if ( y != 8 )
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 PRINTF ("main: wrong result (%d).", y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 y = x.handle.promise().get_v2();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 if ( y != 2 )
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 PRINTF ("main: wrong result 2 (%d).", y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 y = x.handle.promise().get_v3();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 if ( y != 4 )
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 PRINTF ("main: wrong result 3 (%d).", y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70 if (!x.handle.done())
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 PRINT ("main: apparently not done...");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 x.handle.destroy();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 x.handle = NULL;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 PRINT ("main: returning");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 return 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 }