diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-10-22 06:13:50 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-10-22 06:13:50 +0000 |
commit | cfd53b4e999301c5d6c7785c34c49d4e952e8aa4 (patch) | |
tree | a3c42b906b543cb7d74e4c56eca187d6c594cdc3 /clang/test/SemaCXX/coroutines.cpp | |
parent | f8bdb0a9e47fef71d86bc48537d133256ca3d0ad (diff) | |
download | bcm5719-llvm-cfd53b4e999301c5d6c7785c34c49d4e952e8aa4.tar.gz bcm5719-llvm-cfd53b4e999301c5d6c7785c34c49d4e952e8aa4.zip |
[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.
llvm-svn: 250993
Diffstat (limited to 'clang/test/SemaCXX/coroutines.cpp')
-rw-r--r-- | clang/test/SemaCXX/coroutines.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/coroutines.cpp b/clang/test/SemaCXX/coroutines.cpp new file mode 100644 index 00000000000..ae24dd2979f --- /dev/null +++ b/clang/test/SemaCXX/coroutines.cpp @@ -0,0 +1,51 @@ +// RUN: %clang_cc1 -std=c++14 -fcoroutines -verify %s + +void mixed_yield() { + // FIXME: diagnose + co_yield 0; + return; +} + +void mixed_await() { + // FIXME: diagnose + co_await 0; + return; +} + +void only_coreturn() { + // FIXME: diagnose + co_return; +} + +void mixed_coreturn(bool b) { + // FIXME: diagnose + if (b) + co_return; + else + return; +} + +struct CtorDtor { + CtorDtor() { + co_yield 0; // expected-error {{'co_yield' cannot be used in a constructor}} + } + CtorDtor(int n) { + // The spec doesn't say this is ill-formed, but it must be. + co_await n; // expected-error {{'co_await' cannot be used in a constructor}} + } + ~CtorDtor() { + co_return 0; // expected-error {{'co_return' cannot be used in a destructor}} + } + // FIXME: The spec says this is ill-formed. + void operator=(CtorDtor&) { + co_yield 0; + } +}; + +constexpr void constexpr_coroutine() { + co_yield 0; // expected-error {{'co_yield' cannot be used in a constexpr function}} +} + +void varargs_coroutine(const char *, ...) { + co_await 0; // expected-error {{'co_await' cannot be used in a varargs function}} +} |