Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/g++.dg/coroutines/torture/co-ret-14-template-3.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 // { dg-do run } | |
2 | |
3 // Check type dependent function parms. | |
4 | |
5 #include "../coro.h" | |
6 | |
7 // boiler-plate for tests of codegen | |
8 // there is a promise ctor that takes a single int. | |
9 #include "../coro1-ret-int-yield-int.h" | |
10 | |
11 template <typename T, typename U, typename V> | |
12 coro1 | |
13 f (T x, U y, V z) noexcept | |
14 { | |
15 PRINT ("coro1: about to return"); | |
16 T xi = (T) y; | |
17 T yi = (T) z; | |
18 T zi = x; | |
19 co_return 3 + xi + yi + zi; | |
20 } | |
21 | |
22 int main () | |
23 { | |
24 PRINT ("main: create coro1"); | |
25 struct coro1 x = f<int, float, double>(2, 18.0F, 19.0); | |
26 | |
27 /* We should be using the default promise ctor, which sets the value | |
28 to -1. */ | |
29 int y = x.handle.promise().get_value(); | |
30 if ( y != -1 ) | |
31 { | |
32 PRINT ("main: wrong promise init."); | |
33 abort (); | |
34 } | |
35 | |
36 PRINT ("main: got coro1 - resuming"); | |
37 if (x.handle.done()) | |
38 abort(); | |
39 | |
40 x.handle.resume(); | |
41 PRINT ("main: after resume (initial suspend)"); | |
42 | |
43 /* Now we should have the co_returned value. */ | |
44 y = x.handle.promise().get_value(); | |
45 if ( y != 42 ) | |
46 { | |
47 PRINT ("main: wrong answer."); | |
48 abort (); | |
49 } | |
50 | |
51 if (!x.handle.done()) | |
52 { | |
53 PRINT ("main: apparently not done..."); | |
54 abort (); | |
55 } | |
56 PRINT ("main: returning"); | |
57 return 0; | |
58 } |