diff options
Diffstat (limited to 'test/SemaCXX/coroutine-uninitialized-warning-crash.cpp')
| -rw-r--r-- | test/SemaCXX/coroutine-uninitialized-warning-crash.cpp | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp b/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp new file mode 100644 index 000000000000..5bdb232d5307 --- /dev/null +++ b/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -std=c++14 -fcoroutines-ts -fsyntax-only -Wall -Wextra -Wuninitialized  -fblocks +#include "Inputs/std-coroutine.h" + +using namespace std::experimental; + + +struct A { +  bool await_ready() { return true; } +  int await_resume() { return 42; } +  template <typename F> +  void await_suspend(F) {} +}; + + +struct coro_t { +  struct promise_type { +    coro_t get_return_object() { return {}; } +    suspend_never initial_suspend() { return {}; } +    suspend_never final_suspend() { return {}; } +    A yield_value(int) { return {}; } +    void return_void() {} +    static void unhandled_exception() {} +  }; +}; + +coro_t f(int n) { +  if (n == 0) +    co_return; +  co_yield 42; +  int x = co_await A{}; +} + +template <class Await> +coro_t g(int n) { +  if (n == 0) +    co_return; +  co_yield 42; +  int x = co_await Await{}; +} + +int main() { +  f(0); +  g<A>(0); +} | 
