Richard Smith | 0e304ea | 2015-10-22 04:46:14 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -std=c++11 -fcoroutines %s -verify |
| 2 | |
| 3 | template<typename T, typename U> |
| 4 | U f(T t) { |
| 5 | co_await t; |
| 6 | co_yield t; |
| 7 | |
| 8 | 1 + co_await t; |
| 9 | 1 + co_yield t; // expected-error {{expected expression}} |
| 10 | |
| 11 | auto x = co_await t; |
Richard Smith | d7bed4d | 2015-11-22 02:57:17 +0000 | [diff] [blame^] | 12 | auto y = co_yield t; |
Richard Smith | 0e304ea | 2015-10-22 04:46:14 +0000 | [diff] [blame] | 13 | |
| 14 | for co_await (int x : t) {} |
| 15 | for co_await (int x = 0; x != 10; ++x) {} // expected-error {{'co_await' modifier can only be applied to range-based for loop}} |
| 16 | |
| 17 | if (t) |
| 18 | co_return t; |
| 19 | else |
| 20 | co_return {t}; |
| 21 | } |
Richard Smith | 9be594e | 2015-10-22 05:12:22 +0000 | [diff] [blame] | 22 | |
| 23 | struct Y {}; |
| 24 | struct X { Y operator co_await(); }; |
| 25 | struct Z {}; |
| 26 | Y operator co_await(Z); |
| 27 | |
| 28 | void f(X x, Z z) { |
| 29 | x.operator co_await(); |
| 30 | operator co_await(z); |
| 31 | } |
| 32 | |
| 33 | void operator co_await(); // expected-error {{must have at least one parameter}} |
| 34 | void operator co_await(X, Y, Z); // expected-error {{must be a unary operator}} |
| 35 | void operator co_await(int); // expected-error {{parameter of class or enumeration type}} |